Eh bien, j'ai une question légèrement différente de celle-ci : je ne veux pas mapper deux variables en même temps, je veux mapper une variable en utilisant deux autres comme paramètres.
En effet, j'ai lu dans la documentation sur la directive map que:
Avant la version 0.9.0, une seule variable pouvait être spécifiée dans le premier paramètre.
Donc, comme j'ai nginx 1.8, je m'attends à pouvoir utiliser plus d'une seule variable dans le premier paramètre.
Cela m'a amené à penser que je pouvais écrire quelque chose comme les deux dernières directives de carte dans cet exemple:
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" "" "";
}
Mais cela ne fonctionne pas ( nginx -t
renvoie un
nombre d'arguments non valide dans la directive "map"
)
Alors, comment est-il possible de spécifier plusieurs variables dans le premier paramètre? Ou, que signifie réellement la documentation, si je l'ai mal comprise?
la source
Réponses:
Vous avez mal compris les documents de nginx. Cela signifie qu'avant la version 0.9, le premier argument de la
map
doit être une variable unique et rien d'autre. Depuis la version 0.9.0, le premier argument peut être n'importe quelle chaîne avec un nombre quelconque de variables à interpoler.Voici à quoi pourrait ressembler votre premier bloc:
la source