Сделать 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; — мой текущий реврайт
  • Вопрос задан
  • 3919 просмотров
Решения вопроса 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 не подойдёт? Сходу не соображу, как использовать, но подумать можно, как мне кажется
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы