.htaccess: Редирект в зависимости от языка в браузере

2011-07-01

В данном посте представлен пример, позволяющий перенаправить пользователя на языковую версию сайта, которая больше всего подходит конкретному юзеру. Язык берётся из браузера, и отдается в заголовках как «Accept-Language».


RewriteEngine on
# редирект на русскоязычную версию сайта для русских и украинской браузеров
RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteCond %{HTTP:Accept-Language} (ru|uk) [NC]
RewriteRule .* http://fish.izjum.com/ru.html [R=302,L]
# редирект на англоязычную версию сайта для всех остальных языков
RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteRule .* http://fish.izjum.com/en.html [R=302,L]

Этот пример реализует редирект с корневой странички сайта на страничку http://fish.izjum.com/ru.html, если браузер в заголовках отдал «ru» или «uk». Для всех остальных языков происходит перенаправление на страничку http://fish.izjum.com/en.html/en.html.

Обратите внимание, что используется 302-й редирект, то-есть «страничка временно перемещена». Это сделано для того, чтобы поисковики не удалили из индекса корневую страничку и не отдали предпочтение одной из языковых. Если же Вы хотите, чтобы главной счаталась, допустим, русская — используйте 301-й редирект.



11 комментариев на «.htaccess: Редирект в зависимости от языка в браузере»

  1. favicon:

    У меня операционка на планшете англоязычная(так как он не для России был сделан) и чо, мне теперь углубленным изучением инглиша заняться, чтоб на таких говносайтах по часу не торчать?

  2. favicon:

    Уточняю позицию: независимые от пользователя перенаправления нахрен не нужны!
    Берите пример не с детских, а с серьезных сайтов- где флажок страны и ссылка на соответствующую языковую версию сайта в шапке расположена, а юзер сам решит какая версия ему нужна.
    ps достали уже такие тупые «учителя», как вы

  3. admin:

    Если вам «нахрен не нужны» — то и не перенаправляйте, в чем проблема?
    Меня умиляют такие люди как вы. Наверное эта заметка написана тут не спроста, или вы считаете, что её основная цель — позлить вас?
    Если юзер с русским браузером зашел с Египта или Китая, какую версию вы ему собираетесь отдать?!
    А ваши упомянутые флажки никто не отменял, речь идет о стартовой 1й загрузке, а дальше переключайте сколько хотите, храните в кукки, в локалсторедже, где угодно..

    Если у вас англоязычный планшет, и вы не умеете/не хотите его переключить на русский — логично предположить, что вас этот язык полностью устраивает и вам понятен — в этом случае, думаю, вы разберетесь как на сайте с этим языком переключить на более понятный вам язык.
    По крайнем мере людей, которые используют нежелаемый язык значительно меньше чем тех, кто сумел разобраться со своим планшетом.

    Вам лично посоветую не брезговать «инглишом», не такие уж и бесполезные знания.

  4. Charles:

    хм/
    У меня сайтик на 5 языков. Возможно ли (и разумно ли) будет городить такую конструкцию в .htaccess на 5 языков. или Google меня за это в помойку сольет?

  5. Сайтостроитель:

    Отвечу favicon .
    Иногда например есть необходимость строго разделить разный контент для разных языков
    и иногда даже сделать редирект на субдомен и показать апсолютно другой сайт
    Вот для этого и существуют автоопределения языков
    Кому еще интересно можно использовать еще IP геолокации

  6. Андрей:

    Спасибо, сразу заработало как надо и все решилось с двумя языками. Автору статьи огромное спасибо, все заработало!
    Вот мой сайт onastas.com

  7. Алекс:

    а как подключить геолокацию по ip страны. Если мне нужно чтобы при входе с России отображались цены в рублях а с Беларуссии в зайцах?
    Буду благодарен за ответ.

  8. Дмитрий:

    Наконец-то нашел более работающий пример.

    Вопрос.
    Юзаю вордпресс. Настроил мультиязычность, методом site.com/ru/; site.com/uk/; site.com/en/; и т.д. Данный скрипт подошел когда мы переходим на site.com. А вот проблемка, когда страница site.com/ru/post/ доступна с site.com/post/.

    Помогите решить вопрос.
    Спасибо!

  9. Ilya:

    Спасибо большое за ваш труд.

  10. Сергей:

    Мне почему-то кажется, что намного лучше это реализовывать в самой CMS или на вашем фреймворке. То есть на уровне PHP, а не .htacces.
    .htacces хорошо подойдет, например, когда надо возвращать в ответ 301 редирект. Или вообще перекидывать все запросы пользователя на другой сайт.

  11. Anton:

    Тема стала актуальной
    СМS опенкарт2.3

    ##Переопределяем URL с помощью mod_rewrite
    RewriteEngine On
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
    # редирект на украинскую версию сайта для украинских браузеров
    RewriteCond %{REQUEST_URI} ^/$ [NC]
    RewriteCond %{HTTP:Accept-Language} (uk) [NC]
    RewriteRule .* https://site.ua/ua/ [R=302,L]
    # редирект на русскоязычную версию сайта для русских браузеров
    RewriteCond %{REQUEST_URI} ^/$ [NC]
    RewriteCond %{HTTP:Accept-Language} (ru) [NC]
    RewriteRule .* https://site.ua/ [R=302,L]
    при таком раскладе — постоянно редиректит на украинскую версию, русский язык не удается даже перелючить, сразу ред на укр. англ. переключается

    если добавить эту часть кода — то браузеры всех языков редиректит на инглиш
    # редирект на англоязычную версию сайта для всех остальных языков
    RewriteCond %{REQUEST_URI} ^/$ [NC]
    RewriteRule .* http://fish.izjum.com/en.html [R=302,L]

    что я не верно сделал ?

Добавить комментарий