这是.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
Docuement root设置为/ var / www / mywebsite / web,它位于许多虚拟主机上。我可以导航到index.html页面。
我所看到的只是通用的Apache 401页面,任何想法。
编辑:这是我浏览器中的错误消息:
需要授权
此服务器无法验证您 有权访问该文档 请求。要么你提供了 错误的凭证(例如,错误 密码),或者您的浏览器没有 了解如何供应 需要凭证。
此外,还有401授权 遇到所需的错误 试图使用ErrorDocument 处理请求。阿帕奇/ 2.2.9 (Debian)PHP / 5.2.6-1 + lenny8用 位于www.dirbe.com的Suhosin-Patch Server 80号港口
答案 0 :(得分:7)
确保apache用户可以读取/ var / www / errors并将其包含在您的apache配置中:
<Directory /var/www/errors>
Order allow,deny
Allow from all
</Directory>
答案 1 :(得分:3)
这个问题(以及答案和评论)对我帮助很大,非常感谢!
我解决了一种略有不同的方式,并希望分享。在这种情况下,我们需要提供自定义401错误文档以及代理到后端应用程序所需的根路径。
因此,例如,http://example.com需要提供来自http://internal-server:8080/的内容。此外,http://example.com需要使用Basic Auth和自定义401错误文档进行保护。
因此,我在DocumentRoot中创建了一个名为“error”的目录。这是来自vhost的相关行:
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/
答案 2 :(得分:0)
ErrorDocument接受绝对URL路径而不是文件路径。所以它应该是:
ErrorDocument 404 /error/error.html
假设您的文档根目录下是/error/error.html文件。