.htaccess 使用Errordocument 401将导致空白页

.htaccess 使用Errordocument 401将导致空白页,.htaccess,.htpasswd,errordocument,.htaccess,.htpasswd,Errordocument,我的.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

我的.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 

但这会导致一个内部服务器错误。

在无法查看配置文件中的所有内容的情况下,仍然可以清楚地看到,您遇到的问题是因为您抢先拒绝了“所有”用户访问错误页面

换句话说,您不能发回本身受基本授权保护的错误页面。服务器不知道如何正确处理这种递归情况,因此它也不知道

确保明确覆盖并禁用包含自定义错误页的目录的
.htaccess
-请求的授权

例如,如果您的错误文件目录是
/error/
,如您所示:

<Directory /error/>
  Order allow,deny
  Allow from all
</Directory>

命令允许,拒绝
通融
@弗雷德甘特

为了回答你的问题,让我进一步阐述一下401计划。这有助于理解HTTP不是有状态协议。换言之,每个请求和每个响应都与后续的请求和响应隔离存在(根据实际的HTTP协议——当然,浏览器和服务器都可以维护关于每个请求的有状态信息,并尝试将一系列请求彼此关联)

  • 在服务器配置中,定义服务器上受保护的区域,并定义启用访问的凭据
  • 当第一次请求受保护区域内的任何对象时,服务器用401头、
    WWW-Authenticate
    头和授权质询以及可选内容进行响应。请求和响应过程已完成
  • 浏览器接收完成的响应,解析服务器响应中发送的授权质询,并以人类可读的格式呈现给您
  • 如果选择取消授权过程,则浏览器会显示响应正文(如果有)
  • 如果选择提供登录凭据,浏览器将以服务器请求的任何格式对其进行编码,并开始新的请求
  • 当通过第二个请求请求受保护区域内的任何对象时,服务器将验证或使提供的凭据无效,并返回请求的对象,或者返回与以前相同的401头和内容
  • 如果在您尝试提供凭据后,浏览器收到相同的401头/内容,则会再次请求您提供凭据,或者会向您显示从服务器发送的带有401头的响应正文
  • 如果服务器验证了提供的凭据并返回请求的对象,则浏览器将继续在每个请求中发送相同的凭据,直到当前浏览器会话终止。让我称之为浏览器的“后身份验证模式”
需要注意的最重要的一点是,在您看到来自浏览器的登录凭据的请求之前,服务器会收到完整的响应

您的浏览器甚至意识到它需要向您提供登录凭据请求的唯一方式是,不仅有401响应头,还有
WWW-Authenticate
头和质询

如果401自定义错误文档导致浏览器显示错误页面而不是请求登录凭据,则必须是身份验证标头和质询,甚至401状态代码本身未配置为随401错误文档一起出现

对我们来说,这听起来很疯狂,但对服务器的非人逻辑来说,即使从未发送过授权质询,向所有未经授权的请求发送错误文档,并在“后身份验证模式”中将实际对象发送给所有浏览器仍然是非常有意义的

通过注释掉自定义401错误文件指令,然后使用浏览器登录,加载受保护的页面,然后重新启用自定义401错误文件指令,然后刷新浏览器中已处于“后验证模式”的受保护页面,您可以发现是否发生了这种情况

我所期望的是,您的预授权浏览器将继续通过此请求发送其凭据,并且服务器将使用请求的受保护对象进行响应


因此,所有授权请求都会一如既往地正常工作,但只是401错误文档和/或标题不包含身份验证质询触发器,该触发器会告诉浏览器它需要向您请求凭据。

当注释掉
ErrorDocument 401/error/401.html
时,您是否会进入登录窗口?是,然后我得到一个登录窗口。
/error/401.html
是wordpress页面吗?不,只是我创建的一个html。我肯定你已经检查了文件权限,但以防万一:确保web服务器的用户可以读取401.html文件并可以执行其目录(以及所有父级,一直到
/
)。好的一点,但是,假设错误文档不在安全目录中,可能还有什么其他原因?如何解决导致错误文档未正确解决的次要问题的主要问题,例如,显然无法为安全目录/文件提供自定义401页面和登录对话框?首先,感谢您发布详尽的回复,尽管有几点我不确定是否完全正确。另外,在您添加大部分答案之前,赏金到期后的宽限期已经结束,因此没有骰子
:-(
第二,事实证明我的错误文档实际上是我个人遇到的问题的根源,并且