请帮我找到这种行为的解决方案,这对我来说很奇怪。
这是我的htaccess
COALESCE(<TIMESTAMP>,<DATETIME>)
注意L标志,所以我想说当“gif”规则匹配时,链就会被留下。 但事实并非如此。
请求的网址是“emltr.gif”
如果注释了“catch-all”规则和条件,则正确地采用“gif”规则。 (“aaa.html”不存在,这是一个防止不必要的循环行为的测试。)
如果取消注释“catch-all”规则,则采用IT,而不是第一条规则。为什么第二个采取而不是第一个?或者:为什么即使L标志,然后第二个规则被评估,链也不会离开?
谢谢
答案 0 :(得分:1)
手册L|last
[L]标志使mod_rewrite停止处理规则集。 在大多数情况下,这意味着如果规则匹配,则不会处理其他规则。
如果您在.htaccess文件或
<Directory>
部分中使用RewriteRule,...这样的简化形式是,一旦处理了规则,重写的请求将被传回URL解析引擎用它来做它可能做的事情。可能的是,当处理重写的请求时,可能再次遇到.htaccess文件或部分,因此可以从开始再次运行规则集。最常见的情况是,如果其中一个规则导致重定向(内部或外部)导致请求进程重新开始,则会发生这种情况。备用标志[END]不仅可以用于终止当前轮次的重写处理,还可以防止在每个目录(htaccess)上下文中发生任何后续重写处理。这不适用于外部重定向产生的新请求。
简而言之,当您在.htaccess文件或Directory
指令内重写规则时,如果请求被此轮重写,则会再次处理该请求。只有当没有更多重写时,它才会停止。