Помогите сделать rewrite

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

  1. verfaa

    verfaa

    Регистр.:
    29 янв 2007
    Сообщения:
    371
    Симпатии:
    41
    Всем привет.
    Есть сервер работающий под nginx.

    Для сайта на этом сервере уже прописано правило rewrite:

    rewrite ^/user/([^/\.]+)/?$ /viewprofile.php?login=$1 last;

    Все ссылки по этому правилу вида http://site.com/viewprofile.php?login=alex меняются на http://site.com/user/alex

    Т.к. сайт на разных языках, то можно добавить в урл ?language_code=1 и получить английский язык или ?language_code=2 и получить русский язык. Но это некрасиво, хотелось бы, чтобы эти ссылки выглядели красиво, а именно
    http://site.com/ru/
    http://site.com/en/

    Для анкет пользователей

    http://site.com/ru/user/alex
    http://site.com/en/user/alex

    Или можно наоборот

    http://site.com/user/alex/ru
    http://site.com/user/alex/en

    Также нужно учесть что на сайте много других файлов и папок, главную страницу сайта запрашивают и так http://site.com/index.php, есть http://site.com/news.php, http://site.com/articles.php и др.

    Как бы так прописать это правило, чтобы /ru или /en везде заменялся корректно и без ошибок.
    Помогите пожалуйста.
     
  2. unkn0wn

    unkn0wn

    Регистр.:
    22 дек 2006
    Сообщения:
    163
    Симпатии:
    86
    Код:
    location /ru/ {
    rewrite ^/ru/([^/\.]+)/?$ /index.php?language_code=ru&blah=$1 last;
    }
     
    location /en/ {
    rewrite ^/en/([^/\.]+)/?$ /index.php?language_code=en&blah=$1 last;
    }
     
    location /ru/user/ {
    rewrite ^/ru/user/([^/\.]+)/?$ /viewprofile.php?language_code=ru&user=$1 last;
    }
     
    location /en/user/ {
    rewrite ^/en/user/([^/\.]+)/?$ /viewprofile.php?language_code=en&login=$1 last;
    }
    Первые два локейшна отработают index.php (если он двуязычный, если нет, то их можно убрать), две последних отработают профили пользователей на разных языках. По желанию можно сделать два локейшна вместо четырех, но я не знаю внутреннюю кухню движка. А так можно сделать
    Код:
    location /ru/ {
    rewrite ^/ru/user/([^/\.]+)/?$ /viewprofile.php?language_code=ru&user=$1 break;
    .....
    rewrite ^/ru/([^/\.]+)/?$ /index.php?language_code=ru&blah=$1 break;
    } 
    но тут важен порядок указания внутренних урлов, и неизвестно, какие еще редиректы хочет организовать ТС.