Как иметь несколько rewriterules с .htaccess? - PullRequest
5 голосов
/ 14 марта 2011

Я пытаюсь создать многоязычный веб-сайт с помощью Drupal.

Мне нравится иметь следующий формат URL

http://domain/[language]/[node id]

, поэтому я добавил следующее правило в.htaccess для целей тестирования

RewriteRule ^jpn/[0-9]$ jpn.html

Проблема в том, что правило перезаписывается следующим правилом

RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Как мнеесть несколько правил перезаписи?

Ответы [ 2 ]

10 голосов
/ 14 марта 2011

Ваш второй RewriteRule имеет набор L Flag, что означает, что если правило соответствует, дальнейшие правила обрабатываться не будут.

Если вы хотите, чтобы ваше первое правило также прекратило дальнейшую обработку, добавьте к нему также флаг L.

RewriteRule ^jpn/[0-9]$ jpn.html [L]

Также убедитесь, что ваше второе правило указано в списке последним, поскольку оно соответствует всему (. *) И, следовательно, Apache никогда не увидит никаких других правил после него.

Отредактировано: L Flag URL

0 голосов
/ 29 марта 2013

Я не уверен, что это [L] действительно работает в каждом случае, чтобы избежать перезаписи друг друга.Я не эксперт в этом, но я потратил день, чтобы понять, что вам просто нужно добавить 1 Atome в RewriteRule, который работал раньше без перезаписи, и он начинает перезаписываться снова с первого.Мне трудно поверить, что 2 разных правила в 1 htaccess могут правильно работать для двух разных файлов.

Оба сработали на 100% хорошо

RewriteRule ([a-zA-Z_]+)/([a-zA-Z_]+)/([a-zA-Z_]+)\.htm$ display.php?$1&category=$2 [L]
RewriteRule ^/?([a-zA-Z_]+)/([a-zA-Z_]+)\.htm$  news.php?$1 [L]

displnews

Link 2 вместо этого отображает результат link1 ..., просто скажите мне, почему?

RewriteRule ([a-zA-Z_]+)/([a-zA-Z_]+)/([a-zA-Z_]+)\.htm$ display.php?$1&category=$2 [L]
RewriteRule ^/?([a-zA-Z_]+)/([a-zA-Z_]+)/([a-zA-Z_]+)\.htm$ news.php?$1&obj=$2&search=$3 [L]

displНовости

...