1

我需要在 .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():
}
4

1 回答 1

3

默认情况下,Apache 的 mod_rewriteRewriteRule从上到下执行。

因此,当第一个匹配时,您的第二个规则也将被执行并匹配,因为它是通用的包罗万象,因此将匹配新的 url。

在您的情况下,解决方案是强制 mod_rewrite 在第一个规则匹配后停止执行,这是通过将 [L] (最后一个)标志添加到重写规则来完成的:

# 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

于 2013-08-27T13:08:55.167 回答