Групповые/вложенные условия в nginx через переменные

В nginx не поддерживаются условия вида if (cond1 && cond2)  а также вложенные условия вида if (cond1) {if (cond2) {…} }  К примеру у нас есть запрос вида /bn/bn.js , который мы реврайтим на обработчик /admin/code-bn.php , но если в GET параметрах присутствует значение mini, нам нужно реврайтить на другой обработчик /admin/code-bn-mini.php. Кусок конфига выглядит в данном случае так:

if ($uri = "/bn/bn.js") {
    set $conditions  "BN";
}
if ($args ~ "mini") {
    set $conditions  "${conditions}MINI";
}
if ($conditions = "BNMINI") {
    rewrite ^/bn/bn.js /admin/code-bn-mini.php last;
}
if ($conditions = "BN") {
    rewrite ^/bn/bn.js /admin/code-bn.php last;
}

Т.е. мы объявили переменную $conditions в самом основном условии и уже к ней добавляем дополнительный суффикс MINI, если в аргументах найдено совпадение. Это гарантирует нам, что символы «mini» ищутся лишь в $uri вида /bn/bn.js, а не на всех.

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *