【发布时间】:2011-04-04 00:00:18
【问题描述】:
我想将 Apache 配置为在 PHP 脚本引发致命错误时向用户发送带有自定义 500 页面的 500 响应。 我现在所拥有的是它会在页面内容中打印错误,这有利于开发但不适合生产。
如何配置 Apache 以向用户发送带有自定义页面的 500 响应?
【问题讨论】:
我想将 Apache 配置为在 PHP 脚本引发致命错误时向用户发送带有自定义 500 页面的 500 响应。 我现在所拥有的是它会在页面内容中打印错误,这有利于开发但不适合生产。
如何配置 Apache 以向用户发送带有自定义页面的 500 响应?
【问题讨论】:
假设你不仅要发送500 标头(这很容易),而且真的在Apache 的系统中触发500 错误,似乎没有什么简单的解决方案。
根据this question,它是 PHP 自 PHP 5.2.4 以来的默认行为,如果:
我不确定这种行为是否长期可靠(即当 PHP 6 出现时等)。这不是一个广为宣传的功能。
除此之外,我不知道一旦脚本运行就会引发 500。我曾经问过something similar 404s。那里提供的答案(重定向到预定义的 URL,并发送 500 标头)可能是您能得到的最好的答案——尽管这当然不会被记录。
【讨论】:
我会这么说
ErrorDocument 500 /some/page.php
如果你想确保它正确呈现,即使奇怪的事情阻止 PHP 页面呈现,也应该做这个技巧,或者只是一个漂亮的 HTML 页面。
为了触发错误页面,请查看此分析器:How to return an HTTP 500 code on any error, no matter what
【讨论】:
我想做同样的事情,但我认为当前版本的 PHP 不可能。首先,500 errors return 200 status 存在一个错误。因此,在配置文件中设置 ErrorDocument 500 将无效。此外,即使可以重定向,似乎也无法访问错误信息(用于自定义显示和日志记录)。
虽然触发错误很容易。只需将其添加到 PHP 文件中:
throw new Exception();
【讨论】: