我需要在.htaccess中执行条件RewriteRule。
我有JS文件的规则,并规则其他请求。
# Rule for js files
RewriteRule ^client/js/([A-Za-z0-9./]+)$ server/js.php
#Rule for other requests
RewriteRule (.*) server/controller.php
在规则的情况下,任何请求总是转到controller.php。如何使规则逻辑像这样:
if (jsRule) {
go_to_js_php();
} else {
go_to_default_controller():
}
答案 0 :(得分:3)
默认情况下,Apache的mod_rewrite从上到下每隔RewriteRule
执行一次。
所以当第一个匹配时,你的第二个规则也会被执行并匹配,因为它是一个通用的catch-all,因此会匹配新的url。
您的情况下的解决方案是强制mod_rewrite在第一个规则匹配后停止执行,这是通过将[L](last)标志添加到重写规则来完成的:
# Rule for js files
RewriteRule ^client/js/([A-Za-z0-9./]+)$ server/js.php [L]
#Rule for other requests
RewriteRule (.*) server/controller.php
当且仅当此规则实际匹配时,它才会指定当前规则将是mod_rewrite执行的最后一个规则。
有关此标志的详细信息,请参阅http://httpd.apache.org/docs/current/en/rewrite/flags.html#flag_l。