2013-08-27 2 views
1

Мне нужно сделать условное RewriteRule в .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 

В этом случае любой запрос всегда следует обращаться к контроллеру.php. Как сделать правило логики что-то вроде этого:

if (jsRule) { 
    go_to_js_php(); 
} else { 
    go_to_default_controller(): 
} 

ответ

3

По умолчанию mod_rewrite в Apache выполняет все RewriteRule сверху вниз.

Итак, когда первое совпадение, ваше второе правило будет выполнено и совпадет, потому что оно является общим для всех и поэтому будет соответствовать новому 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.