为什么此RewriteRule需要标志[L]

问题描述

使用此配置

<Directory "/path/to/www">
    RewriteEngine On
    RewriteRule "^v1(.*)$" "v2$1" [L]
    RewriteRule "^v2(.*)$" "/v3$1" [R=301]
</Directory>

http://localhost/v1/file.txt重定向到http://localhost/v3/file.txt

但是没有[L]标志,相同的URL重定向到http://localhost/v3/file.txt/file.txt

我不知道为什么。

v3/file.txt/file.txt很奇怪,为什么文件名重复?

谢谢!

解决方法

来自文档here

[L]标志使mod_rewrite停止处理规则集。在大多数情况下,这意味着如果规则匹配,将不再处理其他规则。这对应于Perl中的最后一个命令,或C中的break命令。使用此标志指示应立即应用当前规则,而无需考虑其他规则。

换句话说,[L]打破了链条,否则,将应用下一条规则。