有条件的RewriteRule

时间:2013-08-27 12:24:24

标签: apache .htaccess mod-rewrite

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

1 个答案:

答案 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