我只是花了几个小时试图了解锄头[L]
旗帜真的有效。
我阅读了文档,教程,但没有什么可以解释我的问题。
我有一个简单的.htaccess
文件:
RewriteEngine On
RewriteRule ^ressources/(.+)$ App/ressources/$1
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [L]
RewriteRule ^(?!index.php)(.*)$ index.php?path=$1 [QSA]
它正常工作,除非用户请求不存在的资源文件,例如:ressources/notexist.css
。
所以,如果我去:
http://localhost/htaccessdir/ressources/css/dot-luv/jquery-ui-1.8.16.custom.css
这样可以获得css代码,因为该文件存在。
但如果我去:
http://localhost/htaccessDir/ressources/css/dot-luv/notexists.css
索引页面加载了路径值:
App/ressources/css/dot-luv/notexists.css/css/dot-luv/notexists.css
而不是:
App/ressources/css/dot-luv/notexists.css
这可以通过为第一条规则添加[L]
标志来解决:
RewriteRule ^ressources/(.+)$ App/ressources/$1 [L]
我不明白为什么没有[L]
标志就行不通。
有人可以解释我的行为吗?
由于
答案 0 :(得分:1)
如果未设置L
标志,则还将检查其余规则并应用最后一个匹配。 L
代表 Last 并阻止进一步检查规则。
答案 1 :(得分:0)
mod_rewrite
继续按照定义的顺序应用规则。只有当正则表达式匹配并且前面的重写匹配时,才会应用规则。如果您放置L
标记,则不会应用其他规则(如果该规则为。
在您的情况下,应用第一条规则。下一个规则不是,因为cond不适用。然后应用最后一条规则。