PHPSESSID in your URL? Learn to 301 redirect them with PHP
I’m doing some work on a site which has like 4,500 pages indexed with a PHPSESSID in the URL, causing some major duplicate content problems. I got the server admin to disable the PHPSESSID’s by adding the following to the vhost config:
[code]php_value session.use_trans_sid 0
php_value session.use_only_cookies 1[/code]
I also wanted Google to get a clean URL when it decided to spider one of the old URL’s again, and didn’t have access to mod_rewrite, so I redirected them with some PHP. The solution is quite simple:
[code]if (isset($_GET[‘PHPSESSID’])) {
$requesturi = preg_replace(‘/?PHPSESSID=[^&]+/’,””,$_SERVER[‘REQUEST_URI’]);
$requesturi = preg_replace(‘/&PHPSESSID=[^&]+/’,””,$requesturi);
header(“HTTP/1.1 301 Moved Permanently”);
header(“Location: http://”.$_SERVER[‘HTTP_HOST’].$requesturi);
exit;
}[/code]
Coming up next!
-
Event
Wordcamp Asia 2025
February 20 - 22, 2025 Team Yoast is at Attending, Sponsoring, Yoast Booth Wordcamp Asia 2025! Click through to see who will be there, what we will do, and more! See where you can find us next » -
SEO webinar
Webinar: How to start with SEO (January 16, 2025)
16 January 2025 Learn how to start your SEO journey the right way with our free webinar. Get practical tips and answers to all your questions in the live Q&A! All Yoast SEO webinars »
Hi!
Where did you change/put that code exactly? Where is the “vhost config”?
thanx a lot!
Hi, thanks für this easy to use solution.
I modified the regexp code:
$requesturi = preg_replace(‘/[.|?|&]PHPSESSID=[^&]+/’,””,$_SERVER[‘REQUEST_URI’]);
PHPSESSID can’t be used for that.
but try on you header :
And how to stop WordPress and other scripts from creating cookies with PHPSESSID? I don’t see their use and they are only wasted bandwidth.
Very nice feature! I solved the prob really quick!
But by using the redirection you will loose all data stored in sessions, don’t you?
I got this problem:
Warning: preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 0 in …
and solved it like that:
$requesturi = preg_replace(‘/&PHPSESSID=[^&]+/’,””,$_SERVER[‘REQUEST_URI’]);
$requesturi = preg_replace(‘/PHPSESSID=[^&]+/’,””,$requesturi);
hi joost
i am having the same problem here. since i dont know anything about coding i wanted to ask you if i have to place the second code you provided in this post in the php.ini file as well…thanks!
Thanks for sharing. Very nice trick :)
Thanks for it. Very useful. But there is any solution with PhP to leave previos url when page redirect to new page?
Short and sweet. I really have problems with Session-IDs in WordPress. I will try your hint! But I really wonder, that there is no wordpress plugin for the redirection of session-id-spamed urls… should not be too difficult…
no probs, I just know they don’t like it when you link to a local mirror :)
Ah damn, sorry for that one. PHP.net automatically redirects to the Dutch version, so I didn’t notice it.
very true Arjan, thx! (and sorry, I edited your comment to change the link to php.net instead of nl.php.net :) )
Thanks for sharing this Joost. Note that if you haven’t access to the ini files, this parameters can set by using the ini_set function.