繁体   English   中英

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不会停止?

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

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

如果要在.htaccess文件或各节中使用RewriteRule,则一定要对规则的处理方式有所了解。 简化的形式是,一旦处理了规则,重写的请求就会交还给URL解析引擎,以对其进行处理。 在处理重写的请求时,可能会再次遇到.htaccess文件或节,因此规则集可能会从头开始再次运行。 最常见的情况是,如果其中一个规则导致重定向(内部或外部)导致请求过程重新开始,则将发生这种情况。

(Emph我的)

所以我认为发生的事情是您的最后一条规则触及并重定向。 它不叫底线。 但随后,该请求将像其他任何请求一样处理,您的regexp不会被点击,在此运行中,底线确实起作用。

这也是为什么当您禁用基本规则时它会起作用的原因:第二次不执行任何操作,因此什么也没有发生。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM