Добавить язык в URI на основе cookie с помощью htaccess и установить cookie на основе URI - PullRequest
0 голосов
/ 21 декабря 2011

У меня есть мультиязычный сайт, который использует куки для хранения языковой информации. Мне нужно написать скрипт .htaccess, который

a) проверяет, установлен ли языковой файл cookie и не содержит ли его URI. Если этого не произойдет, добавьте его в URI.

Прямо сейчас у меня есть это:

RewriteCond %{HTTP_COOKIE} language=([a-z]{2}) [NC]
RewriteCond %{REQUEST_URI} !^%1/(.*) [NC]
RewriteRule ^(.*)$ /%1/%2 [L,NC,R=302]

Хотя это дает мне правильный URI, ("domain.com/en/"), я получаю сообщение об ошибке, в котором говорится, что страница не перенаправляет должным образом.

b) проверяет, установлен ли языковой параметр в URI, и устанавливает ли соответствующий файл cookie.

Код, который я получил для этого:

RewriteRule ^([a-z]{2})(.*)/$ - [co=language:$1:.domain.com:7200:/]

Но это устанавливает cookie только после того, как вы покинете страницу. Поэтому мне нужно добавить «/ fr /» к адресу, а затем обновить дважды

Я пытался просмотреть все Google и Stack Overflow, но мне не кажется, что это работает!

1 Ответ

0 голосов
/ 21 декабря 2011

запрос uri всегда начинается с /.Кроме того,% 1 применяется только к последнему RewriteCond, поэтому я думаю, что ваш код должен быть

RewriteCond %{HTTP_COOKIE} language=([a-z]{2}) [NC]
RewriteCond %{REQUEST_URI} !^/(%1)/(.*) [NC]
RewriteRule ^(.*)$ /%1/%2 [L,NC,R=302]

Файл cookie, устанавливаемый после ухода со страницы, кажется странным.Файл cookie устанавливается в ответе, поэтому он будет отображаться только в заголовках запросов при следующем запросе.Не знаю, имеете ли вы это в виду, но это нормальное поведение.Попробуйте проверить document.cookie в javascipt

edit: Выше код не будет работать.см. ниже для моей обновленной версии.Я добавил ваше правило настройки cookie выше и добавил флаг L, чтобы правила под ним не выполнялись, если они совпадают, что предотвращает бесконечный цикл переадресаций, что означает то, что firefox означает «не перенаправлять должным образом».

RewriteRule ^([a-z]{2})(/.*)?$ - [co=language:$1:.domain.com:7200:/]

RewriteRule ^([a-z]{2})(/.*)?$ - [L]

RewriteCond %{HTTP_COOKIE} language=([a-z]{2}) [NC]
RewriteRule ^(.*)$ /%1/$1 [L,NC,R=302]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...