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 -i
→ HTTP/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 重定向,不可能?的主要内容,如果未能解决你的问题,请参考以下文章