好吧,我的问题与这个问题略有不同:我不想同时映射两个变量,我想使用另外两个作为参数来映射一个变量。
事实上,我已经阅读了有关 map 指令的文档:
在 0.9.0 版之前,只能在第一个参数中指定一个变量。
所以,因为我有 nginx 1.8,我希望能够在第一个参数中使用多个变量。
这让我想到我可以在这个例子中写出类似最后两个 map 指令的东西:
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 版本开始,第一个参数可以是任意字符串,可以插入任意数量的变量。您的第一个块如下所示: