apache目录索引行为

时间:2014-03-14 22:05:16

标签: apache .htaccess url-rewriting apache2

我有一个包含

的.htacces文件
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php?action=$1 [QSA,L]

它很适合我的需要。一旦我删除了像这样的文件名条件

,意外
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php?action=$1 [QSA,L]

对我不理解的apache抓住了默认文件(index.html或index.php,具体取决于设置)并将其插入到动作变量中,有人可以向我解释如何工作,因为它显然不是行时采取的路线在场。

1 个答案:

答案 0 :(得分:1)

原因是-f检查请求文件是否存在。最重要的是,重写引擎将遍历所有规则,直到URI停止更改。这意味着第一次,请说您有请求URI:/foo/bar

  • 它不是目录
  • 匹配^(.*)
  • URI被重写为index.php?action=foo/bar

下次,URI为/index.php

  • 它不是目录
  • 匹配^(.*)
  • URI被重写为index.php?action=index.php

下一次,它不会改变,所以重写停止。