Помогите настроить mod_rewrite под смену языков на сайте

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем verfaa, 28 фев 2014.

  1. verfaa

    verfaa

    Регистр.:
    29 янв 2007
    Сообщения:
    375
    Симпатии:
    41
    Есть сайт под управлением cms modx revo
    С помощью переменной GET ?lang=en и ?lang=ru осуществляется переход на русскоязычную или англоязычную версии сайта.
    Помогите написать правило, при котором любая страница вида site.com/ru/ site.com/page_tratata/ru/ будет подгружать с сервера страницы site.com/?lang=ru site.com/page_tratata/?lang=ru
    Важно чтобы оно работало на всех страницах сайта, включая главную
     
  2. denik

    denik Постоялец

    Регистр.:
    1 июл 2011
    Сообщения:
    80
    Симпатии:
    43
    Попробуйте что-то вроде:
    Код:
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)(ru|en|ua)[/]*$ /index.php/$1?lang=$2 [L]
    Но зависит конечно от случая. Этот реврайт будет работать только если явно передан какой-то язык (присутствует ru/en/ua...).

    Лучше покажите что у вас УЖЕ есть в .htaccess?
     
    Последнее редактирование модератором: 28 фев 2014
  3. UJy

    UJy

    Регистр.:
    23 авг 2011
    Сообщения:
    362
    Симпатии:
    130
    Код:
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_URI} .*/ru/
    RewriteRule (.*)/ru/$ /$1/?lang=ru [QSA,L]
    
    RewriteCond %{REQUEST_URI} .*/en/
    RewriteRule (.*)/en/$ /$1/?lang=en [QSA,L]
    
    Замечу, что работать будет ТОЛЬКО если присутствует "/" в конце урла (так был задан вопрос). Если слэша в конце не будет - работать не будет... Желательно написать правило которое будет добавлять слэш в конец УРЛА если его там нету.

    PS: с главной может не сработать, не уверено может ли .* принимать пустое значение...
     
    Последнее редактирование: 28 фев 2014
  4. denik

    denik Постоялец

    Регистр.:
    1 июл 2011
    Сообщения:
    80
    Симпатии:
    43
    Слэш в конец УРЛа:
    Код:
    # slash
    RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?)
    RewriteRule .* %1/ [R=301,L]
     
  5. UJy

    UJy

    Регистр.:
    23 авг 2011
    Сообщения:
    362
    Симпатии:
    130
    Я бы написал так:
    Код:
    RewriteCond %{REQUEST_URI} !.*\/$
    RewriteRule (.*) /$1/ [R=301,L]
    
    или так
    Код:
    RewriteCond %{REQUEST_URI} .*[^/]$
    RewriteRule (.*) /$1/ [R=301,L]
    
     
    Последнее редактирование: 28 фев 2014