Re: Ответ в зависимости от переданного параметра.
Maxim Dounin
mdounin на mdounin.ru
Пт Сен 20 13:22:49 UTC 2019
Hello!
On Fri, Sep 20, 2019 at 05:01:06AM -0400, darksmoke wrote:
> Добрый день
> подскажите, пожалуйста как такое можно реализовать.
> Есть GET запрос, в нем передается параметр, varID=car
>
> Вопрос:
> Как в зависимости от того что пришло в varID вернуть разный ответ
>
>
> if ($arg_varID !~* ("car"|"moto") ) {
> Вернуть JSON
> }
> else
> {
> root $root_path/modules;
> }
>
> Т.е. если НЕ car или Не moto, то вернуть JSON. А если совпало, то загрузить
> статику
Вариантов масса. Например, можно сделать ровно то, что у вас
написано, с точностью до правильно составленного регулярного
выражения:
if ($arg_varid ~ "^(?!car$|moto$).*$") {
return 200 '{ "json": 1 }';
}
То, что внутрь if'а не попадёт - будет обработано обработчиком по
умолчанию, то есть как статика. Директиву root можно задать в
любом месте (вот только не надо в неё совать переменные без нужды).
Или же можно воспользоваться инструкцией break для окончания
обработки инструкций модуля rewrite:
if ($arg_varid = "car") {
break;
}
if ($arg_varid = "moto") {
break;
}
return 200 '{ "json": 1 }';
Так как дальнейшая обработка инстураций rewrite-модуля после break
прекращается, то return сработает только если $arg_varid не "car"
и не "moto".
Если возможных значений может быть много, то эффективнее всего
сделать map, с помощью которого получить готовое условие для
проверки:
map $arg_varid $need_json {
default 1;
car 0;
moto 0;
}
if ($need_json) {
return 200 '{ "json": 1 }';
}
Подробнее в документации тут:
http://nginx.org/ru/docs/http/ngx_http_rewrite_module.html
http://nginx.org/ru/docs/http/ngx_http_rewrite_module.html#if
http://nginx.org/ru/docs/http/ngx_http_rewrite_module.html#return
http://nginx.org/ru/docs/http/ngx_http_rewrite_module.html#break
http://nginx.org/ru/docs/http/ngx_http_map_module.html
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru