mod_rewrite - перестать повторяться для каждого каталога - PullRequest
1 голос
/ 29 октября 2011

Я потратил часы, пытаясь заставить работать простое переписывание, в моем фундаментальном понимании mod_rewrite должна быть ошибка:

Я хочу правило, которое выполняет следующую подстановку:

www.example.com/fr/ -> www.example.com/?lang=fr  

который у меня работает, но для подкаталогов:

www.example.com/fr/other/directories/ -> www.example.com/other/directories/?lang=fr&lang=fr&lang=fr

Кажется, что правило применяется один раз для каждого подкаталога (оно должно применяться только один раз).
Кроме того, запрос без завершающего слеша приводит к добавлению еще одного lang=fr к строке запроса

Правило находится в , а не в теге

RewriteRule ^ / (en | fr | zh | gr | it) / (. *) $ / $ 2? Lang = $ 1 [QSA]

Я также использую директиву DocumentIndex /index.php index.php

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 29 октября 2011

Чтобы быть уверенным, что RewriteRule будет применен только один раз, добавьте это условие до:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^/(en|fr|zh|gr|it)/(.*)$ /$2?lang=$1 [QSA,L]

Поскольку любое внутреннее перенаправление, выполненное mod-rewrite (и у вас будет много, даже с тегом [L]), будет изменять переменную окружения REDIRECT_STATUS.

Тег [L] означает остановку цепочки rewriteRule, если у вас есть другие правила. Но результат перезаписи mod-rewrite в вашем каталоге всегда будет проверяться относительно его нового места назначения (и здесь новое место назначения - тот же каталог), и для переписанного контента будут применяться правила, как если бы это был новый (кроме эта переменная env установлена).

0 голосов
/ 29 октября 2011

Можно попробовать добавить / во второй перезаписи сразу после $s2, чтобы поэкспериментировать с дополнительным дополнением.И попробуйте добавить [L] к условиям, может остановить его повторение для каждого каталога.

RewriteRule ^/(en|fr|zh|gr|it)/(.*)$ /$2/?lang=$1 [QSA,L]

Однако я слышал, что [L] ведет себя по-разному, когда в htaccess вместо того, чтобы быть в httpd.confБоюсь, я не специалист по этому вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...