简洁版本:我们希望 Apache 能够捕获 500 状态并返回 404 之类的状态。有办法吗?
更长的版本:这些服务器正在运行不属于我们的应用程序,它们最近未能通过 PCI 合规性扫描,因为如果您干扰主机,它们可能会抛出 500 状态错误。从长远来看,我们会将它们移至其他网络,这样它们就不需要符合 PCI 标准,但从短期来看,我们希望快速修复,并且不显示应用程序返回的 500 状态。发生这种情况的两个应用程序都通过 Apache 接受其请求。
我希望/假设这将是一个 mod_rewrite 规则,但不知道如何根据状态代码来改变 mod_rewrite。
答案1
如果我理解正确的话,您希望在向客户和扫描仪呈现常规错误页面的同时在日志中捕获 500 错误状态。
一些网络商店这样做是为了“隐藏”网站上更严重的错误,不让攻击者发现。生成 500 错误状态的页面可能是 DOS 攻击的理想目标。扫描网站以找到生成 500 服务器错误的页面,反复攻击这些页面,反复触发错误代码,等待数据库崩溃。
您可以使用以下方式呈现自定义错误页面ErrorDocument 500 yourerrorpage.html
答案2
PCI 扫描因 500 错误而失败?这有点奇怪。无论如何...
设置一个默认值VirtualHost
(您应该已经有一个),它不提供任何服务;对它的任何请求都应该导致 404。
<VirtualHost *:80>
ServerName *
DocumentRoot /var/empty
</VirtualHost>
答案3
使用输出过滤器比重写规则最好能完成此操作。
mod_rewrite 规则必须在侧面发出子请求,然后根据返回的内容决定要服务的 URL。如果子请求成功,内容仍将被丢弃,并且您必须重复该事务作为主请求。
另一方面,输出过滤器可以拦截 500 响应并将其转换为 404。