htaccess - цикл перенаправления - PullRequest
0 голосов
/ 02 февраля 2012

Почему это вызывает цикл перенаправления?

Options +FollowSymlinks
RewriteEngine on
RewriteBase /summary/1/document/

RewriteRule !^[a-z]{2}/ /summary/1/document/en/ [L,R]
RewriteRule ^([a-z]{2})/ ../index.php?lang=$1&type=document

То, чего я пытаюсь достичь, это:

Если язык не указан, перенаправить на английский:

Пример:

website.com/summary/1/document --> website.com/summary/1/document/en/
website.com/summary/1/document/fr/ [no redirect]

А когда указан язык, переписать внутренне в ../index.php с параметрами lang и type.

1 Ответ

1 голос
/ 02 февраля 2012

Из флага L: Apache Документы : flag_l :

Если вы используете RewriteRule в файлах .htaccess или в разделах <Directory>, важно иметь некоторое представление о том, как обрабатываются правила. Упрощенная форма этого заключается в том, что после обработки правил переписанный запрос передается механизму синтаксического анализа URL-адреса, чтобы выполнить с ним все возможное. Возможно, что при обработке переписанного запроса файл или раздел .htaccess могут встретиться снова, и, таким образом, набор правил может быть снова запущен с самого начала. Чаще всего это происходит, если одно из правил вызывает перенаправление - либо внутреннее, либо внешнее - и процесс запроса запускается заново.


Поскольку переписанный запрос передается обратно в механизм синтаксического анализа URL, после перенаправления из первого правила перезаписи

Попробуйте это:

Options +FollowSymlinks
RewriteEngine on
RewriteBase /summary/1/document/

RewriteRule ![a-z]{2}/$ /summary/1/document/en/ [NC,L,R]
RewriteRule ^([a-z]{2})/$ ../index.php?lang=$1&type=document [L,QSA]
...