mod_rewrite规则匹配,但不留链

时间:2016-06-28 09:30:07

标签: apache .htaccess mod-rewrite

请帮我找到这种行为的解决方案,这对我来说很奇怪。

这是我的htaccess

COALESCE(<TIMESTAMP>,<DATETIME>)

注意L标志,所以我想说当“gif”规则匹配时,链就会被留下。 但事实并非如此。

请求的网址是“emltr.gif”

如果注释了“catch-all”规则和条件,则正确地采用“gif”规则。 (“aaa.html”不存在,这是一个防止不必要的循环行为的测试。)

如果取消注释“catch-all”规则,则采用IT,而不是第一条规则。为什么第二个采取而不是第一个?或者:为什么即使L标志,然后第二个规则被评估,链也不会离开?

谢谢

1 个答案:

答案 0 :(得分:1)

手册L|last

中记录了这一点
  

[L]标志使mod_rewrite停止处理规则集。 在大多数情况下,这意味着如果规则匹配,则不会处理其他规则。

     

如果您在.htaccess文件或<Directory>部分中使用RewriteRule,...这样的简化形式是,一旦处理了规则,重写的请求将被传回URL解析引擎用它来做它可能做的事情。可能的是,当处理重写的请求时,可能再次遇到.htaccess文件或部分,因此可以从开始再次运行规则集。最常见的情况是,如果其中一个规则导致重定向(内部或外部)导致请求进程重新开始,则会发生这种情况。

     

备用标志[END]不仅可以用于终止当前轮次的重写处理,还可以防止在每个目录(htaccess)上下文中发生任何后续重写处理。这不适用于外部重定向产生的新请求。

简而言之,当您在.htaccess文件或Directory指令内重写规则时,如果请求被此轮重写,则会再次处理该请求。只有当没有更多重写时,它才会停止。