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