0

我有下一个重写规则:

RewriteEngine ON

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z]+)/(js|css|img)/(.+\.jpg|gif|png|js|css)$ media/myfiles/$1/$2/$3 [L]
RewriteRule .* index.php

我的应用程序有路由类,可以根据我的需要处理 url。

当我尝试打开包含将匹配重写规则的扩展名的文件时,我移至下一个重写规则,并且我的路由器类处理此 url ...

任何想法为什么 apache 在第一次规则匹配后不停止?

PS 第一条规则在禁用第二条规则后起作用。

4

1 回答 1

1

看看这里:http ://httpd.apache.org/docs/2.2/rewrite/flags.html

如果您在 .htaccess 文件或部分中使用 RewriteRule,那么了解规则的处理方式非常重要。其简化形式是,一旦处理了规则,重写的请求就会被交回 URL 解析引擎来做它可能做的事情。处理重写的请求时,可能会再次遇到 .htaccess 文件或部分,因此可能会从头开始再次运行规则集。最常见的情况是,如果其中一个规则导致重定向(内部或外部)导致请求过程重新开始。

(我的)

所以我认为发生的是你的最后一条规则命中并重定向。它不叫底线。但是,该请求像任何其他请求一样被处理,您的正则表达式没有命中,并且在这个运行中,底线确实发挥了作用。

这也是当你禁用底部规则时它起作用的原因:第二次周围没有什么可做的,所以什么也没有发生。

于 2012-06-18T14:11:53.130 回答