无法获取Apache2 401授权错误的自定义消息

时间:2015-09-01 08:01:49

标签: .htaccess apache2 .htpasswd

我有一个共享托管服务器,其中每个子域都位于root的文件夹中。 www.domain.com位于/www文件夹中,subdomain.domain.com子域位于/subdomain文件夹中,等等。

我现在想要的是限制使用subdomain.domain.com密码访问.htaccess,但为没有密码的用户显示自定义消息。我无法让Apache2读取401错误文档。我发现了一些常见的故障排除说文件必须是可读的,在我的情况下肯定是。

因此,我可以将auth文件放在此配置中的唯一两个位置,因为/subdomain受保护,位于/www文件夹下或根目录中(如{{1} }),我不知道它是否有任何区别。但在这两种情况下,那些文件夹显然是可以被Apache2读取的,因为我正在使用它们,我正在使用其他(主要)域的PHP脚本,而我在根目录中获取错误日志,文件权限与上面相同404文件(有效),所有者是一样的。

而且我不认为我的托管服务商正在禁止我使用自定义401错误文档(我已经成功使用自定义404和500文档),因为只有当我尝试指定401文档时,我才会获得额外的文档在我的错误输出中写入/401.html的行。好像它正试图这样做,但还有其他的东西。

它可能是什么,我应该尝试什么?

修改

这是Additionally, a 401 Authorization Required error was encountered while trying to use an ErrorDocument to handle the request.文件的内容:

.htaccess

我现在注意到的是,我的404消息是从Options +Indexes +FollowSymLinks RewriteEngine On RewriteRule ^([^\.]+)$ index.php?data=$1 [QSA,L] AuthName "Restricted Area" AuthType Basic AuthUserFile /subdomain/.htpasswd AuthGroupFile /dev/null require valid-user ErrorDocument 404 /tpl/errors/404.php ErrorDocument 500 /tpl/errors/500.php ErrorDocument 401 /auth_alpha.html 地址开始的绝对路径,而不是文件系统的根,这意味着如果我启动带有http的401错误文档,它会尝试从同一个域读取它吗?这对我来说没什么意义,因为它应该是Apache2指令,而不是浏览器指令,对吧?无论如何,当我尝试添加/而不是../auth_alpha.html时,浏览器仅在页面上输出字符串/auth_alpha.html

1 个答案:

答案 0 :(得分:1)

您需要从身份验证中排除 ErrorDocument个网址:

ErrorDocument 404 /tpl/errors/404.php
ErrorDocument 500 /tpl/errors/500.php
ErrorDocument 401 /auth_alpha.html

Options +Indexes +FollowSymLinks
RewriteEngine On

RewriteRule ^([^.]+)/?$ index.php?data=$1 [QSA,L]

SetEnvIfNoCase Request_URI ^/(auth_alpha\.html$|tpl/errors/) NO_AUTH

# force auth for everything except ErrorDocument URLs
AuthName "Restricted Area"
AuthType Basic
AuthUserFile /subdomain/.htpasswd
AuthGroupFile /dev/null
Require valid-user
Satisfy    any
Order      deny,allow
Deny from  all
Allow from env=NO_AUTH