是什么导致我的.htaccess文件在单个请求上运行多次?

就我的代码而言,我了解到为什么我会遇到无限循环。 所以我有以下几点:

<IfModule mod_rewrite.c> RewriteEngine on RewriteBase / RewriteRule ^foo/?([^/]+)?/?(.+)? /foo.php?bar=$1&baz=$2 [L,NC] </IfModule> 

所以,用户进入foo (或foo/a/b )并redirect到foo.php?bar=$1&baz=$2 。 但在这一点上(这是我知道我需要一个更彻底的解释,因为我确定这是devise).htaccess文件正在重新运行foo.php?bar=$1&baz=$2 ,这匹配我规则,并进入无限循环。 但是我不知道为什么要通过我的规则重新运行。

什么是我不了解.htaccess RewriteRule

PS我已经解决了这个直接的问题,把下面的命令放在规则之前,但是我想知道为什么我可以在将来解决这个问题(所以我可以删除这些命令行,而不是其他的东西)。

 RewriteCondition %{REQUEST_FILENAME} !-f RewriteCondition %{REQUEST_FILENAME} !-d 

第一个请求得到处理,URL被重写。 这导致新的URL的新请求。 如果没有过滤请求的方法(见Devin的答案),你所看到的是正确的行为。

通常在RewriteRule之前需要一个RewriteCond,这样才不会匹配重写的URL,避免无限循环。 这是RewriteCond最常见的用途之一。 你应该感觉良好,并且不要以这种方式使用这种方法来做错事。