Я пытаюсь создать простую веб-страницу html на трех языках. Каждый язык имеет свой каталог, поэтому index.html в "/" находится на английском языке, испанский индекс в "/es" и французский индекс находится в "/fr". Я пытаюсь создать правило перенаправления для каждого языка на основе языка браузера или файла cookie, установленного в href onclick javascript. Это мой код.htaccess:
RewriteEngine on
RewriteCond %{HTTP_COOKIE} !^.*lang=ES.*$ [OR]
RewriteCond %{HTTP:Accept_Language} (es) [NC]
RewriteRule .* http://myweb.com/es/$1 [R=301,L]
RewriteCond %{HTTP_COOKIE} !^.*lang=FR.*$ [OR]
RewriteCond %{HTTP:Accept_Language} (fr) [NC]
RewriteRule .* http://myweb.com/fr/$1 [R=301,L]
RewriteRule .* http://myweb.com/$1 [R=301,L]
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]
Он не работает, потому что бесконечный цикл.
Большое спасибо.
Цикл переадресации происходит из-за безусловного последнего правила RewriteRule.* http://myweb.com/$1 [R=301,L]
. У ваших первых 2 правил также есть ошибка, когда они не захватывают какую-либо группу, а используют их как $1
.
Иметь свои правила таким образом:
RewriteEngine on
RewriteCond %{HTTP_COOKIE} !^.*lang=ES.*$ [OR]
RewriteCond %{HTTP:Accept_Language} (es) [NC]
RewriteRule ^((?!es/).*)$ http://myweb.com/es/$1 [R=301,L,NE]
RewriteCond %{HTTP_COOKIE} !^.*lang=FR.*$ [OR]
RewriteCond %{HTTP:Accept_Language} (fr) [NC]
RewriteRule ^((?!fr/).*)$ http://myweb.com/fr/$1 [R=301,L,NE]
RewriteRule ^((?!(?:es|fr)/).*)$ http://myweb.com/$1 [R=301,L,NE,NC]
Случается, что каждый раз, когда пользователь вводит страницу, ее перенаправляют. например: у кого-то есть файл cookie, который говорит "es", но они идут в каталог es, вы все равно перенаправляете их на страницу es снова и снова. Вы должны указать условие, говорящее о том, на какой странице должно работать каждая перенаправление. что-то вроде RewriteCond %{REQUEST_URI}
Редактировать: Здесь:
RewriteCond %{HTTP_COOKIE} !^.*lang=ES.*$ [OR]
RewriteCond %{HTTP:Accept_Language} (es) [AND]
RewriteCond %{REQUEST_URI} !^myweb.com/fr.*$
RewriteRule .* myweb.com/es/$1