PHP 301 重定向位置 URI 格式

Posted

技术标签:

【中文标题】PHP 301 重定向位置 URI 格式【英文标题】:PHP 301 redirect location URI format 【发布时间】:2011-08-10 04:02:50 【问题描述】:

这是 header('Location: ') 的正确 URI,特别是 ./

header ('HTTP/1.1 301 Moved Permanently');
header ('Location: ./');

谢谢。

【问题讨论】:

您是否要在 URL 中添加斜杠?有更好的方法来做到这一点。 我正在尝试从包含该代码的文件永久重定向到与执行重定向的初始文件位于同一文件夹中的默认文件 (index.something)。 您应该使用绝对 URI。见:w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30 【参考方案1】:

你也可以使用:

header('Location: /', false, 301);

我假设您想重定向到“主页”,即 / 而不是 ./

【讨论】:

嗨,我想重定向到包含该代码的文件所在文件夹的根目录。在这种特殊情况下,它也是站点的根目录。我很担心,因为我读过 HTTP/1.1 需要绝对路径。 根据标准,绝对URL是必需的。这将起作用,但无效 正如@Pekka 提到的,请参阅w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30 我明白了。那么使用.// 是否存在real 风险? 感谢 cmets,不知道需要绝对 URL。赞成正确的解决方案。【参考方案2】:

您必须使用absolute URI according to the spec,这样您就可以使用类似以下的方法:

// check if the server is secure or not to determine URL prefix
if(isset($_SERVER['HTTPS']) and 'on' === $_SERVER['HTTPS']) 
    $location = 'https://';
 else 
    $location = 'http://';


// get the servers base URL
$location .= $_SERVER['SERVER_NAME'] . '/';

// grab the current URI without a file name in it
$location .= dirname($_SERVER['REQUEST_URI']) . '/';

header('Location: ' . $location);
exit();

【讨论】:

以上是关于PHP 301 重定向位置 URI 格式的主要内容,如果未能解决你的问题,请参考以下文章

301,302,303,307重定向区别

如何重定向文件夹?

旧到新的 301 重定向参数以实现更好的 Google 迁移?

HTTP 重定向解析

为啥我的 301 重定向需要这么长时间?

网站301重定向怎么设置