我想重定向所有www.domain.com请求用PHP domain.com的,基本上是:

if (substr($_SERVER['SERVER_NAME'], 0, 4) === 'www.')
{
    header('Location: http://' . substr($_SERVER['SERVER_NAME'], 4)); exit();
}

不过,我想保持请求的URL就像是这样,e.g:

http://www.stackoverflow.com/questions/tagged/php?foo=bar

应该重定向到:

http://stackoverflow.com/questions/tagged/php?foo=bar

我不想依靠.htaccess解决方案,我不确定我不得不使用要做到这一点,其$_SERVER瓦尔。此外,保留了HTTPS协议将是一个加。

我应该怎么做呢?

有帮助吗?

解决方案

$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);

请问用户重定向到完全相同的页面,万维网。完整。

所以,摆脱了www的。中,我们只需更换一个行:

$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;

和,应该工作。

顺便说一句,这是由谷歌推荐的方法,因为它使https://完好,港口以及与这样的,如果你不使用它们。


如秋葵指出的,他使用$_SERVER['HTTP_HOST']因为它来自标题,而不是服务器,从而$_SERVER['SERVER_*']不可靠。你可以用$_SERVER['SERVER_NAME']取代some$_SERVER['HTTP_HOST'],它应该工作方式相同。

其他提示

尝试这种情况:

if (substr($_SERVER['HTTP_HOST'], 0, 4) === 'www.') {
    header('Location: http'.(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on' ? 's':'').'://' . substr($_SERVER['HTTP_HOST'], 4).$_SERVER['REQUEST_URI']);
    exit;
}

如果(isset($ _ SERVER [ 'HTTPS'])&&!空($ _ SERVER [ 'HTTPS'])&&(用strtolower($ _ SERVER [ 'HTTPS'])!= '关闭')){             结果,$ HTTPS = 1;结果         }其他{点击             $ HTTPS = 0;结果         }结果         如果(SUBSTR($ _ SERVER [ 'HTTP_HOST'],0,4)!== 'WWW'){点击             重定向(($ HTTPS的 'https://': 'HTTP://'?”。$ _ SERVER).'www [ 'HTTP_HOST'。$ _ SERVER [ 'REQUEST_URI']);结果         }

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top