Wie nginx, wenn ' s param $1 in der rewrite-Anweisung
Habe ich diesen funktionierenden code in der nginx-config:
if ($http_host ~* ^www\.(.+)$) {
set $host2 $1;
rewrite (.*) http://$host2$1;
}
Ich glaube, dass die string - set $host2 $1;
kann weggelassen werden, und $1 verwendet, in der rewrite-Anweisung ohne Definition einiger Variablen. Aber umschreiben, hat eigenen $1..$9 params.
Wie kann ich über $1 form, falls in der rewrite-Anweisung?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke die regex-dollar-Formulare gelten nur für den letzten regulären Ausdruck. So kann man nicht kombinieren, die
$1
desif
mit der$1
desrewrite
ohne Verwendungset
. Jedoch, gibt es einfachere Lösungen für Ihr Szenario.Erstens, wenn Sie wissen, die host-Namen (z.B.
example.com
), können Sie Folgendes tun:Auf der anderen Seite, wenn Sie nicht über einen bestimmten host-Namen im Hinterkopf, können Sie die folgenden catch-all-Lösung:
Können Sie herausfinden, mehr über diese zweite form hier.
Ich empfehle nicht, die catch-all-Lösungen, da ist es nur sinnvoll, höchstens ein catch-all server block. Wenn möglich, verwenden Sie die namens-server-Lösung.
Beachten Sie auch, dass Sie erreichen können, die über die Umleitung über die
rewrite ^ destination permanent;
form. Alle diese Lösungen vermeiden Sie die Verwendung des schlecht angesehenif
Richtlinie.if
ausführen sollte, ähnlich wie eine verschachteltelocation
block. Führen könnten, eine kleine Menge unnötiger Arbeit in der Bearbeitung der Richtlinien, aber nicht genug, um jemals sorgen machen.