我有一个共享托管服务器,其中每个子域都位于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
。
答案 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