В 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, а не на всех.