RewriteRules 没有因 [L] 标志而停止?

RewriteRules 没有因 [L] 标志而停止?

.htaccess 中的简单 mod 重写。如果我打开例如 /lib/js/core/jquery.min.js,Apache2 将采用最后一条规则而不是第一条规则。我该如何修复此问题?

RewriteEngine on
RewriteRule ^lib/js/core/(.+)$ core/lib/js/$1 [L,QSA]
RewriteRule ^(.+)$ index.php?path=$1 [L,QSA]

解决问题,通过替换第一个大号旗帜结尾

答案1

RewriteRules 应该按顺序处理。你确定它真的匹配第一个正则表达式吗?尝试添加一个前导斜杠,即

RewriteRule ^/lib/js/core/...$

答案2

当您在 .htaccess 文件中使用重写规则时(我和 apache 人员强烈反对这样做),您必须意识到匹配的每条规则都将产生子请求,因此所有规则都将再次处理。由于您的第二条规则匹配所有内容,因此它将在此子请求期间应用。

无法阻止这些子请求的发生显然是一个很大的麻烦,因此引入了 END 标志,但这需要 Apache 2.4,而它还没有那么普及。

相关内容