RewriteCond检查目录是否存在索引文件

时间:2013-10-29 16:27:18

标签: .htaccess mod-rewrite

如果URL指向:

,我试图对所有请求进行重写除外
  • 现有文件
  • 包含索引文件的目录

所以我有以下应该处理它:

RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ redirect.php [QSA]

但是当我导航到包含index.php的文件夹时(是的,我已经检查过DirectoryIndex设置为index.php),它仍会执行重写。

我发现有趣的是,如果我在.htaccess的文件夹中有一个RewriteEngine on(只是那个),那么上面的重写规则就可以了......

任何指针?

2 个答案:

答案 0 :(得分:4)

您需要检查目录部分:

RewriteCond %{REQUEST_FILENAME}/index\.php !-f
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ redirect.php [QSA,L]

此外:

  

我发现有趣的是,如果我在该文件夹中有一个带有RewriteEngine的.htaccess(就是那个),那么上面的重写规则就可以了......

这是因为子目录中的重写规则优先于父目录中的任何规则。因此,如果您有一个RewriteEngine On的子目录,没有规则,那么这意味着子目录优先于父目录中的重写规则,并且没有规则。 (有点令人困惑)。

答案 1 :(得分:4)

在根目录中尝试此规则.htaccess:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1/index.php !-f
RewriteRule ^(.*?)/?$ redirect.php [L]