Бесконечный цикл htaccess

0

Я пытаюсь создать простую веб-страницу 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]

Он не работает, потому что бесконечный цикл.

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

Теги:
loops
.htaccess

2 ответа

0

Цикл переадресации происходит из-за безусловного последнего правила 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]
  • 0
    Спасибо за ответ. По-прежнему происходит то же самое ... бесконечный цикл
  • 0
    проверьте обновленные правила и обязательно протестируйте в новом браузере, чтобы избежать проблем с кэшированием.
0

Случается, что каждый раз, когда пользователь вводит страницу, ее перенаправляют. например: у кого-то есть файл 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 
  • 0
    Можете ли вы дать мне пример кода этого? большое спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню