PHP:无法更改404状态代码,但header()没有错误

时间:2010-07-01 17:05:06

标签: php header http-status-code-404

我正在自定义PHP网站中处理不可用的页面。为此,我用这一行创建了一个.htaccess文件:

ErrorDocument 404 /index.php

在index.php的开头我放置了这段代码:

header($_SERVER['SERVER_PROTOCOL'].' 200 OK', true, 200);

这在我的WAMP环境中非常有效。我正在检查http标头,它会抛出:

Status=OK - 200

但在我的Linux托管中,我总是得到:

Status=Not Found - 404

奇怪的是,PHP根本没有抛出任何错误......就像是覆盖了我的标题。

我需要更改状态代码标头,否则IE7和IE8将不会处理我的结果页面。其他浏览器可以解决这个问题。

也许我需要.htaccess或php.ini中的东西,但没有发现任何相关内容。或者,如果您知道重定向404并返回200的任何其他方法,请告诉我。

2 个答案:

答案 0 :(得分:3)

根据您的Web服务器的配置,可以启用fast-cgi。您需要一个替代语法(如PHP文档中所示):

header("Status: 200 OK"); // for fast cgi
header($_SERVER['SERVER_PROTOCOL'] . " 200 OK");

答案 1 :(得分:2)

将不存在的页面重写为PHP文件的更好方法是:

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule (.*) index.php

这使用mod_rewrite将任何不是目录而不是文件的内容更改为PHP脚本。请记住,如果您的PHP脚本收到不存在的请求,则应发送404标头。