Сделать location для nginx

Задача:
Сделать location, чтобы ссылки, вида:
— example.com/dir1/spb/
— example.com/some/another/dir/sam/

обрабатывались скриптами, соответственно:
— example.com/dir1/?city=spb
— example.com/some/another/dir/?city=sam

Список городов (spb, sam) не много (штук 4-5). Они постоянны и при выборе города страницы всегда находятся в конце uri.

Сейчас смог сделать только rewrite, при котором в адресной строке браузера выдается преобразованный результат. Гуру, подскажите как решить эту задачу.

rewrite ^(.*)?/spb/$ $1?city=spb last; — мой текущий реврайт
  • Вопрос задан
  • 3912 просмотров
Решения вопроса 1
avalak
@avalak
location ~ /(msk|spb|sam|etc)/?$ {
    ## вариант 1. не уверен что это хорошая идея
    #error_page 301 =200 /index.php?city=$1&$query_string;
    #return 301;

    ## вариант 2
    #try_files $uri $uri/ /index.php?city=$1&$query_string;

    ## вариант 3
    fastcgi_pass php_fpm;
    include fastcgi_params;
    fastcgi_param QUERY_STRING city=$1&$query_string;
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
sirko_el
@sirko_el
На сколько я понял Ва мнужно что-то подобное:
location ~ /dir1 {
  rewrite	^/dir1/([a-z]+)/$ /dir1/?city=$1 last;
}
location ~ /some/another/dir {
  rewrite	^/some/another/dir/([a-z]+)/$ /some/another/dir/?city=$1 last;
}

Ограничения:
1. Конфиг будет работать только с двумя урлами /dir1/spb/ и /some/another/dir/sam/ со слешами в конце.
2. Аббревиатуры городов должны содержать только буквы в нижнем регистре.
3. В каждой из директорий /dir1/ и /some/another/dir/ должны лежать индексные файлы.
Ответ написан
JustAMan
@JustAMan
proxy_pass вместо (вместе — нужное подчеркнуть) rewrite не подойдёт? Сходу не соображу, как использовать, но подумать можно, как мне кажется
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы