我在Windows / IIS / PHP webhost上实现自定义404错误页面时遇到问题。每当我尝试在标题中发送404状态消息时,都不会向客户端发送任何内容,而是显示空白页面。
这是我正在使用的一个非常简单的脚本:
<?php
header('HTTP/1.1 404 Not Found');
header('Status: 404 Not Found');
var_dump(headers_list());
?>
在我的开发机器上,输出(在浏览器中显示)是
array(2) { [0]=> string(23) "X-Powered-By: PHP/5.2.6" [1]=> string(21) "Status: 404 Not Found" }
在我的主机上没有输出。我似乎无法生成除空白页面之外的任何内容,无论PHP回应什么内容,或者作为普通HTML包含在下面,尽管PHP处理例如记录,数据库写入等正常继续。
有人可以提出问题或解决方法吗?
答案 0 :(得分:5)
'空白页'闻起来像error_reporting(0)隐藏了你会得到的错误信息。也许在标题之前有一些输出,这会引发错误。检查一下。
答案 1 :(得分:2)
如果在PHP标记之后放置文本怎么办?
此外,请确保您的脚本没有在主机上出错,无论是检查apache错误日志,在脚本上运行php -l还是打开error_reporting和display_errors。
答案 2 :(得分:2)
如果在主机上配置PHP以通过CGI运行,则可能无法在IIS中生成404错误页面(除非说谎并返回200 OK,这是一件坏事)。当然,我一直无法说服IIS 4-6.0允许我的CGI 404错误通过浏览器。
您通常不希望PHP运行CGI,还有其他相关问题以及速度慢。在IIS上,应首选PHP ISAPI扩展(尽管我没有尝试过,但我无法确认它是否解决了这个特定问题)。
答案 3 :(得分:1)
我在Linux上遇到与PHP 5.2.6相同的问题。我发现Web服务器不会打印前8109个字节。
IE6忽略自定义错误页面&lt;长度为512字节。这可能是对此问题的解释,但可能您已经在多个浏览器中进行了测试。
答案 4 :(得分:0)
检查您的主机是否允许您使用PHP动态更改标头。我的主机不允许我通过PHP设置404标头,但其他标头(301,内容类型)都没问题。
答案 5 :(得分:0)
我的建议是不要自己设置HTTP / 1.1 404标头,让网络服务器为你做。
传统上,这是通过状态标头完成的,网络服务器应该将其转换为HTTP / 1.0或1.1 404 Not Found标头。
(旁注:Status标头不是真正的HTTP标头,仅用于将信息从应用程序传送到服务器本身。)