嗯,我有与这个问题略有不同:我不想同时映射两个变量,我想使用另外两个变量作为参数来映射一个变量。
我确实读过在文档中关于 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”指令中的参数数量无效
)
那么,如何在第一个参数中指定多个变量?或者,如果我误解了,文档实际上是什么意思?
答案1
您误解了 nginx 的文档。这意味着在 0.9 版本之前,第一个参数map
必须是单个变量,不能是其他变量。从 0.9.0 版本开始,第一个参数可以是任意字符串,并且可以插入任意数量的变量。
你的第一个区块可能如下所示:
map "$bot:$request" $np {
default "";
"~^yes:" "";
"~*^:.*newproject" "yes";
}