Apache2 重写模块,标志 [L]


Apache2 rewrite module, flag [L]

>我有下一个重写规则:

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 在规则第一次匹配后不停止吗?

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

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

如果您在 .htaccess 文件或 部分,重要的是要对 如何处理规则。简化的形式是,一旦 规则已处理完毕,重写的请求将返回给 URL 解析引擎可以使用它做什么。有可能 在处理重写的请求时,.htaccess 文件或 部分可能会再次遇到,因此可能会运行规则集 再次从头开始。最常见的情况是,如果 规则导致重定向(内部或外部)导致 请求流程重新开始。

(恩普我的)

所以我认为发生的事情是你的最后一条规则命中并重定向。它不叫底线。但是,该请求的处理方式与任何其他请求一样,您的正则表达式不会命中,并且在此运行中,底线确实开始发挥作用。

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