我的.htaccess看起来像这样:
ErrorDocument 401 /error/401.html
AuthType Basic
AuthName "Password Protected Area"
AuthUserFile /var/www/vhosts/funatodev.de/httpdocs/wordpress/.htpasswd
AuthGroupFile /dev/null
Require valid-user
# BEGIN WordPress
# END WordPress
但是当包含第一行而不是登录窗口时,我只得到一个空白页面。 (当然,文件/error/401.html存在)我尝试添加以下行:
SetEnvIf Request_URI "^/(error/401\.html|robots\.txt)$" allow_all
Order allow,deny
Allow from env=allow_all
Satisfy any
但这会导致内部服务器错误。
答案 0 :(得分:2)
如果无法查看配置文件中的所有内容,仍然可以清楚地看到您遇到的问题,因为您已经先发制人地拒绝了所有问题"所有"用户访问错误页面。
换句话说,您无法发回本身受基本授权保护的错误页面。服务器不知道如何正确处理这种递归情况,因此它没有。
确保明确覆盖并禁用.htaccess
- 请求的包含自定义错误页面的目录的授权。
例如,如果您的错误文件目录为/error/
,则表明:
<Directory /error/>
Order allow,deny
Allow from all
</Directory>
@佛瑞德-甘特
要回答您的问题,请让我对401流程进行一些扩展。有助于理解HTTP不是有状态协议。换句话说,每个请求和每个响应都与后续请求和响应隔离(关于实际的HTTP协议 - 当然,您的浏览器和服务器都可以维护有关每个请求的有状态信息,并尝试关联一个系列彼此的请求)。
WWW-Authenticate
标头和授权质询以及可选内容进行响应。请求和响应过程已完成。最重要的是要在从浏览器中看到来自登录凭据的请求之前,从服务器收到完整的响应。
您的浏览器甚至意识到它需要向您提供登录凭据的唯一方法是,如果不仅有401响应标头,还有WWW-Authenticate
标头和挑战。< / p>
如果您的401自定义错误文档导致您的浏览器显示错误页面而不是请求登录凭据,则必须是认证标头和质询,或者甚至401状态代码本身未配置为401错误文件。
对我们来说听起来很疯狂,但对于服务器的非人类逻辑,即使没有发送任何授权质询,向所有未授权的请求发送错误文档仍然是完全合理的,并且&#34;后验证模式下所有浏览器的实际对象。&#34;
通过注释掉自定义401错误文件指令,然后使用浏览器登录,加载受保护的页面,然后重新启用自定义401错误文件指令,您可以查看是否发生了这种情况,然后在浏览器中刷新已经处于&#34;验证后模式的受保护页面。&#34;
我期望您的预授权浏览器将继续使用此请求发送其凭据,并且服务器将使用请求的受保护对象进行响应。
因此所有授权请求都一如既往地正常工作,但只是401错误文档和/或标题不包含验证质询触发器,告诉您的浏览器需要询问您为你的凭据。