Nun, ich habe eine etwas andere Frage als diese : Ich möchte nicht zwei Variablen gleichzeitig zuordnen, sondern eine Variable mit zwei anderen als Parametern zuordnen.
In der Tat habe ich in der Dokumentation über die Kartenrichtlinie gelesen, dass:
Vor Version 0.9.0 konnte im ersten Parameter nur eine einzige Variable angegeben werden.
Da ich also Nginx 1.8 habe, erwarte ich, dass ich im ersten Parameter mehr als eine einzelne Variable verwenden kann.
Dies führte mich zu der Annahme, dass ich so etwas wie die beiden letzten Kartenanweisungen in diesem Beispiel schreiben könnte:
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" "" "";
}
Aber es funktioniert nicht ( nginx -t
gibt a zurück
Ungültige Anzahl von Argumenten in der Direktive "map"
)
Wie ist es also möglich, im ersten Parameter mehrere Variablen anzugeben? Oder was bedeutet eigentlich die Dokumentation, wenn ich sie falsch verstanden habe?
quelle
Antworten:
Sie haben die Dokumente von nginx falsch verstanden. Dies bedeutet, dass vor Version 0.9 das erste Argument der
map
einzelnen Variablen und sonst nichts sein muss. Seit Version 0.9.0 kann das erste Argument eine beliebige Zeichenfolge mit einer beliebigen Anzahl von zu interpolierenden Variablen sein.So könnte Ihr erster Block aussehen:
quelle