2

这是我的VirtualHost配置:

<VirtualHost *:80>

     ServerName example.com
     DocumentRoot /var/www/example.com/public

     <Directory /var/www/example.com/public>
             Options +FollowSymLinks
             AllowOverride All
             Require user user1 user2
     </Directory>

     <Location /error/401>
             Require all granted
     </Location>

     ErrorLog ${APACHE_LOG_DIR}/example.com.error.log
     LogLevel warn
     CustomLog ${APACHE_LOG_DIR}/example.com.access.log combined

     ErrorDocument 500 /error/500
     ErrorDocument 404 /error/404
     ErrorDocument 401 /error/401

</VirtualHost>

但是当我故意使身份验证失败时(或者当我直接打开 /error/401 时),我得到了这个:

Unauthorized

This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.

Additionally, a 401 Unauthorized error was encountered while trying to use an ErrorDocument to handle the request.

我究竟做错了什么?根据下面链接的文档,Location应该在之后处理,Directory这样应该可以工作。

http://httpd.apache.org/docs/current/sections.html#merging

编辑:

很明显,这是有问题的部分:

Additionally, a 401 Unauthorized error was encountered while trying to use an ErrorDocument to handle the request.
4

1 回答 1

1

我遇到了一个非常相似的问题。关键的实际问题是,在站点的 DocumentRoot 级别验证失败后,无法访问位于 DocumentRoot 下方的自定义错误页面(即 /error/401),因此会发出默认的 Apache 错误消息。

我采用的解决方案是将 html 合并到 ErrorDocument 401 指令中。例如

ErrorDocument 401 "INSERT MARKUP HERE"

(注意标记周围的引号是必不可少的)。

当然,这在很大程度上是一种解决方法。

于 2020-01-26T22:21:21.950 回答