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 mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Ответить