08.04.2019 19:18, Sergey Kandaurov пишет:
On 8 Apr 2019, at 19:03, RuslanValitov <nginx-fo...@forum.nginx.org> wrote:

Добрый день. Пишу conf файл для своего сайта.
Задача сделать Location который удовлетворяет следующим путям:
site.ru/catalog/
site.ru/catalog/?id=3
site.ru/catalog/1/
site.ru/catalog/1/?id=3
при этом необходимо получить значение $1 если оно есть.

Использую регулярное выражение:
location ~* catalog/(\w+)
--
site.ru/catalog/1/ -работает
site.ru/catalog/1/?id=3 -работает
site.ru/catalog/ - 404
--

Подскажите как изменить регулярное выражение что бы учитывался вариант
(site.ru/catalog/) ?
Используйте квантификатор "?":
location ~* catalog/(\w+)?

https://www.pcre.org/original/doc/html/pcrepattern.html#SEC17

и "?id=3" не часть uri и в проверку  регулярного выражения в location не попадает вообще...

и в приведенное выражение Вы поймаете еще и /Tratata/My/Super/TheCaTaLog/TheRE/AreMoRe/letters и в $1 будет TheRE

Но, возможно, оно Вам так и нужно., ну или

location ~ "^/catalog/(?:(?<catalogid>\d+)/)?$"

номер после id будет в $catalogid

наличие параметра id можно посмотреть в $arg_id внутри локешна.

Ну так.. :)

/Алексей

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Ответить