6

我正在尝试对所有请求进行重写,除非 URL 指向:

  • 现有文件
  • 带有索引文件的目录

所以我有以下应该处理的事情:

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

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

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

任何指针?

4

2 回答 2

5

您需要检查目录部分:

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

还:

我还发现有趣的事情是,如果我在那个文件夹中有一个 .htaccess 并且 RewriteEngine (仅此而已),那么上面的重写规则就可以工作......

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

于 2013-10-29T16:32:00.373 回答
5

在您的根 .htaccess 中尝试此规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1/index.php !-f
RewriteRule ^(.*?)/?$ redirect.php [L]
于 2013-10-29T16:33:03.110 回答