【问题标题】:PHP 301 redirect location URI formatPHP 301 重定向位置 URI 格式
【发布时间】: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

标签: php header location uri


【解决方案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();

【讨论】:

    猜你喜欢
    • 2021-06-01
    • 2013-09-20
    • 2011-11-19
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 2014-03-11
    • 2014-03-08
    相关资源
    最近更新 更多