条件重写规则



我需要在.htaccess.中执行条件重写规则

我有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():
}

默认情况下,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有关此标志的更多详细信息。

最新更新