在这个问题上有一些不同的误解.以下PHP代码:
header("HTTP/1.0 500 Internal Server Error");
die();
将不会触发Apache错误页面 – 它触发浏览器的默认错误页面.一旦控制权被赋予了PHP,它就不会回到Apache来进行错误处理.
ErrorDocument仅适用于错误代码,而不是成功代码.它在文档中
Syntax: ErrorDocument error-code document
如果您误认为某种浏览器错误页面出现服务器错误,那么这可能是您的主要问题的原因.除非您的自定义错误处理程序输出一定量的数据,否则一些浏览器将始终显示自己的错误页面.确保您的输出大小至少为几千字节.
您的问题的原因很可能只是Apache的内置行为与您选择的测试URL相结合.从ErrorDocument文档:
Although most error messages can be
overriden,there are certain
circumstances where the internal
messages are used regardless of the
setting of ErrorDocument. In
particular,if a malformed request is
detected,normal request processing
will be immediately halted and the
internal error message returned. This
is necessary to guard against security
problems caused by bad requests.
编辑:如何在Apache中模拟500错误.我的第一个想法是.htaccess中的语法错误,但这不会触发自定义错误处理程序.我发现最简单的方法是通过添加以下行来启用.htaccess中的CGI:
ErrorDocument 500 /500.PHP
Options +ExecCGI
AddHandler cgi-script .pl
然后添加一个崩溃的perl脚本:
#!/usr/bin/perl
safasfdsfdd_(*EYFIUOBAF(_*AS^FD_(*AWHD{
您需要确保perl脚本可以由apache的用户执行.这显示了我的自定义500处理程序.
但是,您在使用PHP时不太可能触发Apache 500,所以这可能不是一个有用的测试.