我使用 Apache 上的 .htaccess 文件来显示自定义错误文档。这一切也都运行正常。
但我仍然在日志中看到很多这样的错误:
[Thu Aug 13 10:38:31 2020] [notice] [client AH00113: /home/www/.htaccess:6 cannot use a full URL in a 401 ErrorDocument directive --- ignoring!
我的 .htacess 第 6 行看起来很简单:
ErrorDocument 401 http://error.foo.bar/401.html
为什么 401 ErrorDocument 指令中不能使用完整 URL?是错误还是功能?
答案1
您只能使用本地 URL 路径来响应代码 401。这是因为
当您指定指向远程 URL 的 ErrorDocument(即任何带有 http 等方法的内容)时,Apache HTTP Server 将向客户端发送重定向,告诉它在哪里可以找到文档,即使文档最终位于同一台服务器上。这有几个含义,最重要的是客户端将不会收到原始错误状态代码,而是会收到重定向状态代码。这反过来会使网络机器人和其他尝试使用状态代码确定 URL 是否有效的客户端感到困惑。此外,如果您在 ErrorDocument 401 中使用远程 URL,客户端将不知道提示用户输入密码,因为它不会收到 401 状态代码。因此,如果您使用 ErrorDocument 401 指令,那么它必须引用本地文档。