PHP 301 重定向,不可能?

Posted

技术标签:

【中文标题】PHP 301 重定向,不可能?【英文标题】:PHP 301 Redirect, Impossible? 【发布时间】:2011-07-13 05:05:23 【问题描述】:

我一直在尝试进行正确的 301 重定向,但未能成功。无论我尝试什么,它总是一个 302 重定向。

返回 302:

http_redirect("urlgoeshere", '', false, HTTP_REDIRECT_PERM)

返回 302:

header("HTTP/1.1 301 Moved Permanently");
header("Location: urlgoeshere");

谁能解释为什么这些以 302 而不是 301 的形式返回?服务器操作系统是 linux,运行 php/5.2.14。自己试试吧。

我会给你们一个 URL 来试试。我正在使用 YSlow 和 Googlebot 进行测试。

应该是 301:http://www.fantasysp.com/player/mlb/Albert_Pujols/1486349

【问题讨论】:

为我工作:$ curl http://localhost/test.php -iHTTP/1.1 301 Moved Permanently 我们需要有关您的环境的更多信息。 您使用的是 Windows、Linux 还是 Mac?显然 IIS 有一些问题... php 301 redirects actually doing a 302 redirect的可能重复 确保您没有忽略一些简单的事情,例如编辑错误的文件、上传到错误的服务器等... 服务器在 Linux 中运行,所以它并不完全是另一篇文章的欺骗,它指的是 IIS。 【参考方案1】:

其实很简单:

header('Location: ' . $url, true, 301);


如果您使用的是 FastCGI,请尝试这样做:

header('Status: 301 Moved Permanently', true);
header('Location: ' . $url); // or header('Location: ' . $url, true, 301);

【讨论】:

我试过了,还是不行。我将 URL 添加到为我显示 302 的实时页面。你也看到 302 了吗? @brant:我看到了 301。你用什么来检查 HTTP 响应代码? 有趣。我正在 Firefox 中使用 YSlow 进行测试,并在网站管理员工具中查看 Googlebot 的响应。两者都为我显示 302。 @brant:我不知道如何在 YSlow 中看到这一点,但我已经发布了 FireBug 看到的代码和 HTTP 响应的屏幕截图。你用的是什么网络服务器? @brant:您是将 PHP 作为 CGI 还是作为 Apache 模块运行?

以上是关于PHP 301 重定向,不可能?的主要内容,如果未能解决你的问题,请参考以下文章

由于浏览器缓存,PHP 标头 301 重定向不起作用

301重定向PHP或永久重定向PHP

php 301 重定向实际上是在执行 302 重定向

XHR HEAD 请求是不是有可能不遵循重定向 (301 302)

Mass 301 Moved 永久重定向

301将index.html重定向到/或/index.php