如何使正常的 http 请求无法访问 Apache ErrorDocuments?

如何使正常的 http 请求无法访问 Apache ErrorDocuments?

阿帕奇文档解释,我们如何为不同的 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 和ErrorDocuments 可以/将显示请求的 URL,而不是ErrorDocument.因此,除非他们能猜出您的命名方案,否则不可能直接访问。

客户端仍会收到一个404或其他适当的 HTTP 状态代码,而不是 200/OK。

Apache 将请求记录为 404,如果配置为以这种方式记录,则显示请求的 URL。

刚刚在 Debian 和 Ubuntu 系统上使用默认配置(而不是添加指令)对 apache2.4.x 的默认安装进行了测试ErrorDocument 404 /test.html

相关内容