12

这是 .htaccess 文件的相关部分:

AuthUserFile  /var/www/mywebsite/.htpasswd
AuthGroupFile /dev/null
AuthName  protected
AuthType Basic
Require valid-user

ErrorDocument 400 /var/www/errors/index.html
ErrorDocument 401 /var/www/errors/index.html
ErrorDocument 403 /var/www/errors/index.html
ErrorDocument 404 /var/www/errors/index.html
ErrorDocument 500 /var/www/errors/index.html

文档根设置为 /var/www/mywebsite/web,它位于许多虚拟主机上。我可以导航到 index.html 页面。

我所看到的只是通用的 Apache 401 页面,任何想法。

编辑:这是我浏览器中的错误消息:

需要授权

此服务器无法验证您是否有权访问所请求的文档。要么您提供了错误的凭据(例如,错误的密码),要么您的浏览器不了解如何提供所需的凭据。

此外,在尝试使用 ErrorDocument 处理请求时遇到 401 Authorization Required 错误。Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny8 和 www.dirbe.com 上的 Suhosin-Patch 服务器 端口 80

4

3 回答 3

6

确保 apache 用户可以读取 /var/www/errors 并将其包含在您的 apache 配置中:

<Directory /var/www/errors>
  Order allow,deny
  Allow from all
</Directory>
于 2010-12-03T00:05:24.227 回答
4

ErrorDocument 采用绝对 URL 路径而不是文件路径。所以应该是:

ErrorDocument 404 /error/error.html

假设您的文档根目录下是一个 /error/error.html 文件。

于 2018-02-19T15:15:31.880 回答
3

这个问题(以及答案和评论)帮助了我很多,非常感谢!

我解决了一个稍微不同的方式,并想分享。在这种情况下,我们需要提供一个自定义的 401 错误文档,并且需要将根路径代理到后端应用程序。

因此,例如,http ://example.com需要从http://internal-server:8080/提供内容。此外,http ://example.com需要使用带有自定义 401 错误文档的 Basic Auth 进行保护。

因此,我在 DocumentRoot 中创建了一个名为“error”的目录。这是来自虚拟主机的相关行:

    ErrorDocument 401 /error/error401.html

    # Grant access to html files under /error
<Location "/error">
Options -Indexes
Order Deny,Allow
Allow from all
</Location>

    # restrict proxy using basic auth
<Proxy *>
Require valid-user
AuthType basic
AuthName "Basic Auth"
AuthUserFile /etc/apache2/.htpasswd
</Proxy>

    # Proxy everything except for /error
ProxyRequests Off
ProxyPass /error !
ProxyPass / http://internal:8080/
ProxyPassReverse / http://internal:8080/
于 2011-08-30T15:56:44.723 回答