Назад | Перейти на главную страницу

Перенаправление в зависимости от предпочтительного языка (Accept-Language) с помощью .htaccess

Когда пользователи запрашивают /, Я хочу перенаправить их на /en или /de, в зависимости от их предпочтений, указанных в заголовке HTTP-запроса Accept-Language.

Я думаю, это легко сделать со сценариями на стороне сервера, но мне нужен .htaccess решение, так как оно должно работать на статическом сайте.

Что пробовал:

Есть ли решение для этого?

Независимо от того, выполняете ли каким-либо образом переадресацию согласования контента или позволяете проверять / сравнивать значения качества в RewriteCond директива или что-то совершенно другое.

Некоторые мысли:

Если у вас есть доступ к конфигурации сервера, возможно, есть выход: использование RewriteMap в конфигурации вашего сервера.

Затем вы можете отправить Accept-Language в Perl или любой другой скрипт, который вернет предпочтительный язык, который вы можете использовать в своем RewriteRule с 301.

Если у вас есть доступ к языку вроде php, вы можете использовать файл index.php в "/"который отправит перенаправление с функцией header('Location: /en/static-pages.html'). Из php 5.3 также есть функция locale_accept_from_http(), который возвращает предпочтительный языковой стандарт из заголовка.

Но важно: вы хотите, чтобы пользователи "get their preferred language". Вы уверены, что этот метод позволяет пользователю получить предпочтительный язык? Многие люди не устанавливают это в настройках своего браузера. Автоматический выбор языка должен (должен?) Сочетаться с запоминанием выбора пользователя (cookie), и выбор пользователя должен (должен?) Иметь приоритет над автоматическим выбором.

Отказ от ответственности: Я не проверял это. Я использовал нечто подобное в прошлом для этого типа логики, используя mod_alias для установки переменных и позволяя mod_rewrite обрабатывать несколько условий. В Apache 2.4 это становится проще с операторами If.

RewriteEngine On
SetEnvIf Request_URI ^/$            toplevel
SetEnvIf Accept-Language 'fr'       lang_french
RewriteCond %{ENV:toplevel}         1
RewriteCond %{ENV:lang_french}      1
RewriteRule ^   /fr [R=302,L]

Я должен добавить, что в этом примере используется конфигурация apache, а не .htaccess. Я помню, что были некоторые предостережения относительно mod_rewrite в .htaccess, но я никогда не использую его из-за штрафов за задержку. Удачи!