Перенаправление языка с mod_rewrite - PullRequest
3 голосов
/ 31 мая 2011

У меня есть сайт, который предлагается на 7 языках.

Я хочу иметь возможность перенаправлять пользователя на основе языка браузера только тогда, когда пользователь посещает домашнюю страницу. Это предназначено для дополнительного удобства использования, когда дело доходит до органического трафика. Мне нужно, чтобы это перенаправление применялось только к домашней странице, так как сайт также рассылает почтовые программы, специфичные для каждого языка, и они не будут работать, если пользователь перенаправлен.

Также каждый язык является поддоменом. то есть www.site.com для английского и de.site.com для немецкого. URL-адреса почтовых программ будут выглядеть примерно так: www.site.com/home/login?query=string

Я бы хотел сделать это с файлом .htaccess, если это возможно.

Кто-нибудь может предложить понимание?

Спасибо.

Ответы [ 2 ]

7 голосов
/ 01 июня 2011

Поскольку вы хотите перенаправлять только на своей домашней странице, вы можете сделать это следующим образом (предполагая, что www.xyz.com - ваша домашняя страница)

RewriteCond %{HTTP:HOST} www.xyz.com  // user visiting default
RewriteCond %{HTTP:Accept-Language} ^de [NC] // browser language German
RewriteRule ^$ de.xyz.com [L,R=301] // R=302 if you need temporary redirect

http://tech -blog.borychowski.com / index.php / 2009/03 / Htaccess / переадресовать-по-в-браузере языка-мод-переписывание-и-HTTP_ACCEPT_LANGUAGE /

1 голос
/ 10 октября 2015

Это уточнение ответа Ризвана , слишком много для редактирования или комментария (я пытался).

Я предполагаю, что вы хотите перенаправить только тогда, когдапользователь заходит на домашнюю страницу вашего домена по умолчанию (здесь www.xyz.com, а не de.xyz.com и т. д.).Вот как это можно сделать (следуя этим инструкциям ):

RewriteCond %{HTTP:HOST} www.xyz.com         // Visit to default domain.
RewriteCond %{HTTP:Accept-Language} ^de [NC] // Browser language German.
RewriteRule ^$ http://de.xyz.com/       [L,R=301]

RewriteCond %{HTTP:HOST} www.xyz.com
RewriteCond %{HTTP:Accept-Language} ^it [NC]
RewriteRule ^$ http://it.xyz.com/       [L,R=301]

# etc. for your other 5 languages

Примечания и пояснения :

  • R=301 isпостоянное перенаправление, которое обычно кэшируется браузерами.Это ограничивает ваши варианты изменения цели перенаправления позже, так что вы можете рассмотреть вариант использования временного перенаправления без кэширования R=302.
  • Определение предпочтительного языка путем просмотра первого значения в заголовке Accept-Language:работают в большинстве случаев, но не соответствуют стандарту .Это неправильно интерпретирует теоретически возможные значения, такие как de;q=0.5, en;q=0.9.Чтобы понять это правильно, смотрите вдохновение здесь и здесь .
  • В RewriteRule, ^$ соответствует пустой строке, что означает «домашняя страница»,Это потому, что Apache удалит префикс каталога из пути к файлу, который соответствует каталогу, который находится в вашем .htaccess в [ source ].(В контексте VirtualHost удаление этого / не происходит, и вместо этого шаблон должен быть ^/$.)
...