我有下一个重写规则:
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。第一条规则在禁用第二条规则后有效。
答案 0 :(得分:1)
看看这里:http://httpd.apache.org/docs/2.2/rewrite/flags.html
如果您在.htaccess文件或中使用RewriteRule 部分,重要的是要有一些了解 如何处理规则。 简化形式就是这一次 规则已经处理,重写的请求被交还给 URL解析引擎可以用它做它可能做的事情。有可能 当处理重写的请求时,.htaccess文件或 可能会再次遇到该部分,因此可以运行规则集 从一开始。最常见的情况是,如果其中之一 规则导致重定向 - 内部或外部 - 导致 请求流程重新开始。
(emph mine)
所以我认为发生的是你的最后一条规则命中并重定向。它没有称之为底线。但是,请求的处理方式与任何其他请求一样,您的正则表达式“T命中”,并且在此运行中,底线将发挥作用。
这也是禁用底部规则时的原因:第二次无所事事,所以没有任何事情发生。