2013-10-08 6 views
1

В файле htaccess необходимо, чтобы правила перезаписи выполнялись по заказу? Например, длинные первые и более короткие длинные или что-то в этом роде? Или, нормально ли положить их в любом порядке. У меня есть только несколько правил, таких как ниже (около 20), но все это большой беспорядок.Порядок RewriteRules в файле htaccess

RewriteRule ^/?(backend)/(users)/(new|blocked)/([a-z0-9]+)/?$ /blah/users/index.php?type=$2&case=$3&offset=$4 [NC,L] 

ответ

1

Упорядочение правил перезаписи очень важно в .htaccess. В конце вам нужно поставить наиболее конкретные из них в начало и наиболее общие (catch all) типы.

Позвольте мне показать его на примере. Предположим, что вы хотите скрыть .php расширения для всех действительных .php файлов, но хотите передать остальные файлы в index.php, то вам нужно написать правила PHP потайные первый, как это:

# first try loading PHP file if available 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule^%{REQUEST_URI}.php [L,NC] 

# not available then send it to /index.php?file=<file> 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^index.php?file=%{REQUEST_URI}.php [L,QSA] 
+0

Большинство моих правил, как то, что я 've Упомянуто в моем вопросе ... – Norman

+0

Учитывайте, что в кодировке рассматриваются следующие правила: if, elseif, elseif, else'. Таким образом, весь блок catch-all else появится в конце. Сказав, что если у вас есть все правила, такие как 'if (x = 5)', 'if (x = 6)', 'if (x = 7)', 'if (x = 8)' etc, то порядок не будет дело. – anubhava

Смежные вопросы