Apache2重写模块,标志[L]

时间:2012-06-18 14:03:16

标签: php apache mod-rewrite apache2

我有下一个重写规则:

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在规则第一次匹配后没有停止的想法?

P.S。第一条规则在禁用第二条规则后有效。

1 个答案:

答案 0 :(得分:1)

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

  

如果您在.htaccess文件或中使用RewriteRule    部分,重要的是要有一些了解   如何处理规则。 简化形式就是这一次   规则已经处理,重写的请求被交还给   URL解析引擎可以用它做它可能做的事情。有可能   当处理重写的请求时,.htaccess文件或   可能会再次遇到该部分,因此可以运行规则集   从一开始。最常见的情况是,如果其中之一   规则导致重定向 - 内部或外部 - 导致   请求流程重新开始。

(emph mine)

所以我认为发生的是你的最后一条规则命中并重定向。它没有称之为底线。但是,请求的处理方式与任何其他请求一样,您的正则表达式“T命中”,并且在此运行中,底线将发挥作用。

这也是禁用底部规则时的原因:第二次无所事事,所以没有任何事情发生。