我已将一个目录添加到我的网站的公共文件夹中,并在其中放置了以下 .htaccess 文件:
AuthName "Restricted Area"
AuthType Basic
AuthUserFile /path/to/.htpasswd
AuthGroupFile /
Require valid-user
该.htpasswd
文件存在且具有有效内容。
在网站的公共文件夹中,有一个 .htaccess 文件,其重写规则如下:
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
通过此设置,我的/protected
文件夹不再受到保护。
- 如果我保持不变重写规则,Apache 似乎无法读取我的
/protected/.htaccess
文件,并且我的/protected
文件夹不受保护。 - 如果我注释掉重写,则尝试访问我的
/protected
目录会导致输入密码,正如预期的那样。
我修改了根.htaccess
重写规则,我认为应该阻止mod_rewrite
尝试重写对我的/protected
文件夹的请求,如下所示:
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/protected
RewriteRule . index.php
但这似乎没有效果:
- 该请求似乎已处理,
/index.php
而不是按预期提示输入身份验证详细信息 /protected
文件夹不受保护- 网站其余部分正常运行
index.php
我的受保护文件夹内也有一个文件( /protected/index.php
),其内容如下:
die('protected');
有人能看出这种方法或我对根.htaccess
重写规则的修改有问题吗?
答案1
捂脸!
我的重写条件做按预期工作,问题出在我的/protected/.htaccess
文件中:
对于基本身份验证,服务器会写入“401 Unauthorized”标头,然后根据预定义路径查找错误文档。大多数情况下,错误文档不会存在于您要保护的目录中,因此请求由重写引擎处理,并引发 404 错误。
解决方案是将以下内容添加到/protected/.htaccess
文件:
ErrorDocument 401 "Unauthorized Access"
RewriteEngine off
... Authorisation lines
答案2
这是一个老问题,但我刚刚遇到了这个问题。如果您不想或无法编辑受保护的 .htaccess,并且您尚未设置 401 错误文档,那么您也可以在主 .htaccess 中设置 401 errdoc。