WWW to non-WWW Redirect with PHP

php, redirect

Solution

$pageURL = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://";
if ($_SERVER["SERVER_PORT"] != "80")
{
    $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} 
else 
{
    $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
header('Location: '. $pageURL);

Would redirect the user to the exact same page, www. intact.

So, to get rid of the www. , we just replace one line:

$pageURL = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://";
if ($_SERVER["SERVER_PORT"] != "80")
{
    $pageURL .= substr($_SERVER['SERVER_NAME'], 4).":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} 
else 
{
    $pageURL .= substr($_SERVER['SERVER_NAME'], 4).$_SERVER["REQUEST_URI"];
}
return $pageURL;

And that should work.

By the way, this is the method that is recommended by Google, as it keeps `https://` intact, along with ports and such if you do use them.

As Gumbo pointed out, he uses `$_SERVER['HTTP_HOST']` as it comes from the headers instead of the server, thus `$_SERVER['SERVER_*']` is not as reliable. You could replace some`$_SERVER['SERVER_NAME']` with `$_SERVER['HTTP_HOST']`, and it should work the same way.

Problem

I want to redirect all www.domain.com requests to domain.com with PHP, basically: ``` if (substr($_SERVER['SERVER_NAME'], 0, 4) === 'www.') { header('Location: http://' . substr($_SERVER['SERVER_NAME'], 4)); exit(); } ``` However I do want to maintain the requested URL like in SO, for e.g.: ``` http://www.stackoverflow.com/questions/tagged/php?foo=bar ``` Should redirect to: ``` http://stackoverflow.com/questions/tagged/php?foo=bar ``` I don't want to rely on `.htaccess` solutions, and I'm unsure which `$_SERVER` vars I'd have to use to make this happen. Also, preserving the HTTPS protocol would be a plus. How should I do this?

Original source