我的 .htaccess 文件中有许多针对 404、401、403 等错误的
ErrorDocuments
设置,这些错误都重定向到我的错误页面,但是当 PHP 报告 500 时,永远不会显示为 500 错误设置的 ErrorDocument
. 500 代码发送到浏览器,输出为空白。我需要做一些特殊的事情才能启用 500 个错误文档以与 PHP 一起使用吗?
我的指令如下所示:
ErrorDocument 401 /errorpage.php?error=401
ErrorDocument 403 /errorpage.php?error=403
ErrorDocument 404 /errorpage.php?error=404
ErrorDocument 500 /errorpage.php?error=500
我查看了 php.ini,看不到任何明显会覆盖 Apache 设置的内容,并且我的 httpd.conf 中也没有
ErrorDocument
指令。我还应该寻找其他地方吗?
提前致谢。
请参阅this对一个非常相似的问题的回答。基本上,PHP 几乎不会触发 500。
您可能需要在 Apache conf 链的早期添加 ErrorDocument 声明。如果您将其添加到虚拟主机配置中,它可能不会被调用。
我在使用 codeigniter 和 Imagick 时碰巧遇到了同样的问题。当出现问题时,imagick 设置了 500 HTTP 错误,在这种情况下,Codeigniter 的自定义 500 消息不会显示。
我通过向所有 Imagick 函数添加 try-catch 解决了这个问题。检查 500 问题是从哪里出现的,然后在那里添加一个 try-catch。至于
ErrorDocument 500 /errorpage.php?error=500
,我在网上读到了同样的内容,有些人声称这解决了他们的类似问题,其他人则说这没有帮助,因为 Apache 已将控制权移交给 PHP。也许某些 php 代码将 headers 设置为 500,这可能会导致显示其自定义 500 错误消息的浏览器。
内部服务器错误
服务器遇到内部错误或配置错误,无法完成您的请求。
请联系服务器管理员,告知他们发生此错误的时间,以及您在出现此错误之前执行的操作。
服务器错误日志中可能提供有关此错误的更多信息。
此外,尝试使用 ErrorDocument 处理请求时遇到 500 Internal Server Error 错误....
我不相信 Apache 会让您运行出现 500 个错误的 PHP 文件,因为错误页面可能会生成错误。尝试将 500 错误渲染为 HTML 文件,并将指令指向该文件。