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

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

  1. verfaa

    verfaa

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

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

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

    Все ссылки по этому правилу вида Перейти по ссылке

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

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

    Перейти по ссылке
    Перейти по ссылке

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

    Перейти по ссылке
    Перейти по ссылке

    Также нужно учесть что на сайте много других файлов и папок, главную страницу сайта запрашивают и так Перейти по ссылке и др.

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

    unkn0wn

    Регистр.:
    22 дек 2006
    Сообщения:
    164
    Симпатии:
    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;
    } 
    но тут важен порядок указания внутренних урлов, и неизвестно, какие еще редиректы хочет организовать ТС.