禁用子目录的 mod_rewrite

Mic*_*ior 3 mod-rewrite apache-2.2

我正在使用 mod_rewrite 为漂亮的 URL 运行一个 CMS,但是我在 CMS 下的子目录中运行了另一个站点,该站点需要禁用 URL 重写,所以我在.htaccess文件中添加了几行:

Options -MultiViews
Options +ExecCGI

AddHandler php5-cgi .php
Action php-cgi /cgi-bin/php-wrapper.cgi
Action php5-cgi /cgi-bin/php-wrapper.cgi

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# Added following two lines
RewriteCond %{REQUEST_URI} ^/dir/
RewriteRule ^(.+) - [PT,L]

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d     
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

这是有效的,但是下面的目录之一/dir/受到保护mod_auth,并且仍在被重写。如果我取出该目录文件中的Require valid-user指令,则.htaccess一切正常。

这是.htaccess受保护目录中的文件:

RewriteEngine off

AuthType Basic
AuthName "Administration"
AuthUserFile "/home/user/admin/.htpasswd"
require valid-user
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。这已经困扰我好几个星期了!我做了一些谷歌搜索,其他人也遇到了这个问题,但我还没有找到解决方案。

Gaz*_*Gaz 9

我遇到了同样的问题,迈克尔,终于找到了解决方案

对于基本身份验证,服务器写入“401 Unauthorized”标头,然后根据预定义的路径查找错误文档。大多数情况下,错误文档不会存在于您要保护的目录中,因此请求由重写引擎处理,从而引发 404 错误。

这个问题的解决方案非常简单。您需要在 .htaccess 文件中添加一行代码,指示 Apache 忽略错误文档。完成后,代码应如下所示:

ErrorDocument 401 "Unauthorized Access"

RewriteEngine off

AuthType Basic
AuthName "Administration"
AuthUserFile "/home/user/admin/.htpasswd"
require valid-user
Run Code Online (Sandbox Code Playgroud)

希望对你有用!