![如何使正常的 http 请求无法访问 Apache ErrorDocuments?](https://linux22.com/image/136901/%E5%A6%82%E4%BD%95%E4%BD%BF%E6%AD%A3%E5%B8%B8%E7%9A%84%20http%20%E8%AF%B7%E6%B1%82%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AE%20Apache%20ErrorDocuments%EF%BC%9F.png)
阿帕奇文档解释,我们如何为不同的 HTTP 错误设置自定义错误页面,并通过其状态代码(401、403、404、500、503 等)进行标识。
然而,该文档的内容本质上是这样的:在出现错误的情况下,Apache 会生成一个针对文档的内部子请求。
例如,一个
ErrorDocument 404 /errors/dunno.html
ErrorDocument 500 /errors/sux.html
行将导致在出现 404(未找到文件)或 500(内部服务器)错误的情况下提供/errors/dunno.html
文档。/errors/sux.html
然而,这也意味着 http 请求将作为普通文件https://my.server/errors/sux.html
提供服务。sux.html
这不是我想要的。
我希望错误页面应该存在于 之外DocumentRoot
,并且使用普通的 http 查询应该完全无法访问它们。唯一的情况是,当 Apache 提供ErrorDocument
受其配置中的指令影响的(非 200)http 答案时,应该提供它们。
我能以某种方式做到这一点吗?
答案1
你真的测试过吗ErrorDocument
?我在做这件事时注意到两件事......
我尝试设置一个基于假 URL 的 API,其中 404 errordoc 是我的主 API PHP 脚本,该脚本将在解析请求的 URL 后返回内容。在浏览器中正常工作,显示的 URL 是请求的 URL,而不是ErrorDocument
.
然而,AngularJS 抱怨 404 状态代码,即使消息的内容是请求的 json。
所以...
Apache 和ErrorDocument
s 可以/将显示请求的 URL,而不是ErrorDocument
.因此,除非他们能猜出您的命名方案,否则不可能直接访问。
客户端仍会收到一个404
或其他适当的 HTTP 状态代码,而不是 200/OK。
Apache 将请求记录为 404,如果配置为以这种方式记录,则显示请求的 URL。
刚刚在 Debian 和 Ubuntu 系统上使用默认配置(而不是添加指令)对 apache2.4.x 的默认安装进行了测试ErrorDocument 404 /test.html
。