当前位置: 首页 > 面试题库 >

使用PHP将WWW重定向到非WWW重定向

琴献
2023-03-14
问题内容

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

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

但是我确实想像SO中那样维护请求的URL,例如:

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。完整。

因此,要摆脱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;

那应该起作用。

顺便说一句,这是Google推荐的方法,因为它会保持https://不变,并保留端口以及您是否使用过的端口等。

正如Gumbo指出的那样,他使用的$_SERVER['HTTP_HOST']是来自标头而不是服务器的消息,因此$_SERVER['SERVER_*']可靠性不高。您可以将替换$_SERVER['SERVER_NAME']$_SERVER['HTTP_HOST'],并且应该以相同的方式工作。



 类似资料:
  • 问题内容: 是否有可能以某种方式将www重定向到node.js中的非www URL?由于节点Web服务器中没有htaccess,我很好奇该怎么做。 问题答案: 你在用快递吧?如果是这样,则可以使所有GET请求都通过的路由处理程序,检查它们是否为“ www” URL,并在适当时重定向到适当的非www URL。

  • 我有这个在我的. htaccess文件: 但是每当我访问根目录上的文件时,就像它将重定向到。 我如何纠正它,以便它将正确地重定向到?

  • 好吧,我恨死它了。我已经想解决这个问题几个小时了,但我还是不知道是不是错了,或者我错过了什么。 我有这个代码: 它会将http请求重定向到https,但每当我键入domain.com时,它都会重定向到https://domain.com,并抛出一个ssl错误: 这可能不是你要找的网站!您试图访问域。但实际上您到达了一个服务器,该服务器的名称为www.domain.com。这可能是由于服务器配置错误

  • 我在PHP上有一个自定义的非CMS站点。 我现在的生活方式。htaccess设置允许我使用不带“.php”部分的URL,并将所有非www请求重定向到www: 现在我们切换到HTTPS。 如何在中从到获得适当的SEO友好重定向。htaccess? 我试着用一根线代替第三根线 但它不起作用... 另外,有没有办法为. php请求设置301重定向以重定向到non-. php变体?虽然它看起来像是指重定向

  • 我正在尝试使用重定向主网站URL。从www到非www的htaccess,但使用下面的代码片段也会影响我的子域博客。我的域名。通用域名格式。如果我进入子域。我的域名。com我被直接重定向到mydomain。通用域名格式 如何从规则中排除子域? Litespeed web服务器

  • 我需要执行以下操作:我当前的地址如下所示:https://www.domain.com 我想用htaccess:www.domain重定向。通信https://www.domain.com和http://domain.com到https://www.domain.com 我在这里尝试了一些建议,但最终还是没完没了的循环。我试过: 任何帮助都将不胜感激。 更新:我想我已经做到了以下几点: 这样做对吗