LINUX.ORG.RU
ФорумAdmin

RewriteRule, Apache2


0

0

Фиг его знает, в какой раздел надо было.

Переключение языков без использования серверных скриптов, без наличия в урлах идентификатора языка.

Использовался mod_rewrite, структура каталогов:

/en/...
/de/...
/fr/...
/.htaccess:

RewriteEngine On
RewriteBase /

# это переключатель локали. устанавливаем куки, обнуляем lang параметр во избежание зацикливания
RewriteCond %{QUERY_STRING} lang=(en|fr|de)
RewriteRule .* $0? [CO=lang:%1:%{HTTP_HOST},R,L]

# если куки установлен идём в локальную субдиректорию
RewriteCond %{HTTP_COOKIE} lang=(de|fr|en)
RewriteRule .* %1/$0  [L]

# если нет - смотрим язык пользователя
RewriteCond %{HTTP:Accept-Language} ^(en|fr|de).*$
RewriteRule .* %1/$0 [L]

# наконец если ничего не сработало - устанавливаем дефолтную локаль
RewriteRule .* fr/$0 [L]

# иначе при редиректе новая локаль сразу не видна
ExpiresActive On
ExpiresDefault "access plus 0 seconds"

/en/.htaccess:

RewriteEngine Off

Урл переключения языка:

<a href="?lang=de">Deutsch</a>

Собственно, всё почти замечательно, но есть два но.

Первое - необходимость использования mod_expire, без «ExpiresActive On» браузеры не делают reload (первое правило) при переходе по ссылке переключения языка, несмотря на получаемый 302. Не понимаю, почему.

Второе - Chromium 5.0.375.99 (51029) Ubuntu 10.04 при первом заходе на сайт без установленного куки получает от сервера 500 - превышен лимит рекурсии. Оно пытается рекурсивно зайти в / -> /en/ -> /en/en/ -> ... Хром нормально работает. Косяк Хромиума? Надо ли чинить?

★★
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.