Ну у меня есть немного другой вопрос, чем этот: Я не хочу отображать две переменные одновременно, я хочу сопоставить одну переменную, используя две другие в качестве параметров.
Действительно я прочитал в документации о директиве карты, которая:
До версии 0.9.0 в первом параметре можно было указать только одну переменную.
Итак, поскольку у меня есть nginx 1.8, я ожидаю, что смогу использовать более одной переменной в первом параметре.
Это навело меня на мысль, что я мог бы написать что-то вроде двух последних директив карты в этом примере:
map $http_user_agent $bot {
default "";
"~*Googlebot" "yes";
"~*MJ12bot" "yes";
"~*bingbot" "yes";
etc.
}
map $request $bot $np {
default "" "";
default "yes" "";
"~*newproject" "" "yes";
"~*newproject" "yes" "";
}
map $bot $np $regular {
"" "" "yes";
"" "yes" "";
"yes" "" "";
}
Но не работает (nginx -t
возвращает
недопустимое количество аргументов в директиве "map"
)
Итак, как можно указать несколько переменных в первом параметре? Или что на самом деле означает документация, если я ее неправильно понял?
Вы неправильно поняли документацию nginx. Это означает, что до версии 0.9 первый аргумент map
должна быть единственной переменной и ничего больше. Начиная с версии 0.9.0 первым аргументом может быть любая строка с любым количеством переменных для интерполяции.
Вот как может выглядеть ваш первый блок:
map "$bot:$request" $np {
default "";
"~^yes:" "";
"~*^:.*newproject" "yes";
}