Что не так с этим простым правилом перезаписи, которое не перенаправляет? - PullRequest
0 голосов
/ 07 октября 2018

Добрый день всем,

Я изо всех сил пытаюсь понять, что не так с этим простым правилом, которое не работает.У меня есть веб-сайт с такими URL-адресами: site.com/support, теперь я хочу перенаправить все URL-адреса site.com на site.com/en, site.com/support/ на site.com/en/support/,....

После многих попыток и поиска я придумал 2 следующих правила:

RewriteRule ^(?![a-z]{2}/)(.*)$ /en/$1 [R=301,L] # redirect to default language
RewriteRule ^([a-z]{2})/(.*)$ /$2?lang=$1 [QSA,L]

каждое из этих правил работает совершенно по-отдельности, но приводит к слишком большому количеству перенаправлений, когдав сочетании (? lang = en & lang = en & lang = en ...)

любой может сказать мне, пожалуйста, что не так?

Спасибо

1 Ответ

0 голосов
/ 12 октября 2018

Проблема в том, что оба правила изменяют REQUEST_URI и заставляют друг друга многократно выполняться, пока браузер не обнаружит цикл перенаправления и не прекратит перенаправление с ошибкой.

Это можно исправить с помощью:

RewriteEngine On

# redirect to default language
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteRule ^(?![a-z]{2}/)(.*)$ /en/$1 [R=301,L,NE]

RewriteRule ^([a-z]{2})/(.*)$ /$2?lang=$1 [QSA,L]

RewriteCond %{ENV:REDIRECT_STATUS} !200 условие предотвратит цикл перенаправления, поскольку Apache установит переменную REDIRECT_STATUS env в 200 после первого успешного выполнения 1-го правила.

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