防止特定 REQUEST_URI 的重定向

防止特定 REQUEST_URI 的重定向

我已将一个目录添加到我的网站的公共文件夹中,并在其中放置了以下 .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

Apache URL 重写和基本身份验证之间的冲突

答案2

这是一个老问题,但我刚刚遇到了这个问题。如果您不想或无法编辑受保护的 .htaccess,并且您尚未设置 401 错误文档,那么您也可以在主 .htaccess 中设置 401 errdoc。

相关内容