如何在nginx的map指令中指定多个variables

那么我有一个比这个稍微不同的问题 :我不想同时映射两个variables,我想映射一个variables使用另外两个参数。

事实上,我已经阅读了关于地图指令的文档 :

在版本0.9.0之前,只能在第一个参数中指定一个variables。

所以,因为我有nginx 1.8,我希望能够在第一个参数中使用多个单个variables。

这导致我认为我可以在这个例子中写下类似于最后两个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”指令中的参数个数无效

那么,怎样才能在第一个参数中指定几个variables呢? 或者,如果我误解了它,那么实际上是什么意思呢?

你误解了nginx的文档。 这意味着在版本0.9之前, map第一个参数必须是单个variables,而不是其他的。 从版本0.9.0开始,第一个参数可以是任意数量的要插入的variables的string。

在这里,你的第一个块如何看起来像:

 map "$bot:$request" $np { default ""; "~^yes:" ""; "~*^:.*newproject" "yes"; }