Nginx überschreibt die nicht www-Präfix-Domäne in die www-Präfix-Domäne
Sehe ich die Nginx HttpRewriteModule Dokumentation hat ein Beispiel zum umschreiben einer www-Präfix-domain auf eine nicht-www-domain vorangestellt:
if ($host ~* www\.(.*)) {
set $host_without_www $1;
rewrite ^(.*)$ http://$host_without_www$1 permanent; # $1 contains '/foo', not 'www.mydomain.com/foo'
}
Wie kann ich das reverse - -- - rewrite-eine nicht-www-domain vorangestellt, um eine www-Präfix-domain? Ich dachte, vielleicht könnte ich etwas tun, wie die folgenden, aber Nginx nicht wie die geschachtelte if-Anweisung.
if ($host !~* ^www\.) { # check if host doesn't start with www.
if ($host ~* ([a-z0-9]+\.[a-z0-9]+)) { # check host is of the form xxx.xxx (i.e. no subdomain)
set $host_with_www www.$1;
rewrite ^(.*)$ http://$host_with_www$1 permanent;
}
}
Außerdem wollte ich, dass diese Arbeit für alle domain-Namen, ohne explizit zu sagen, Nginx umzuschreiben domain1.com -> www.domain1.com, domain2.com -> www.domain2.com usw. da habe ich eine große Anzahl von domains zu umschreiben.
InformationsquelleAutor der Frage saltycrane | 2009-10-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie bereits in der Nginx-Dokumentation, die Sie sollten vermeiden Sie die Verwendung des
if
- Direktive im Nginx, wo möglichdenn sobald Sie haben eineif
in Ihrer Konfiguration Ihrer server zu bewerten, muss jede einzelne Anforderung zu entscheiden, ob Sie übereinstimmen, dassif
oder nicht.Eine bessere Lösung wäre, mehrere server-Richtlinien.
Werden, wenn Sie versuchen, zu dienen, eine SSL (HTTPS) aktiviert Website, bekam man mehr oder weniger drei verschiedene Optionen.
if
Richtlinie.Es gibt auch eine option zur Verwendung von SNI, aber ich bin nicht sicher, dass diese vollständig unterstützt, ebenso wie der jetzt.
InformationsquelleAutor der Antwort Lars
InformationsquelleAutor der Antwort ss.
Nun, ich denke, ich weiß nicht wirklich brauchen, die äußeren "if" - Anweisung, da bin ich nur die Prüfung für domains der form xxx.xxx sowieso. Folgende Werke für mich, wenn es nicht robust ist. Lassen Sie mich wissen, ob es eine bessere Lösung.
Edit: Hinzugefügt: Bindestrich, um den regulären Ausdruck, da es sich um ein gültiges Zeichen im Hostnamen.
InformationsquelleAutor der Antwort saltycrane
Es ist nur möglich, gültige Hostnamen, da die Anforderung wird nie machen Sie es zu Ihrem server anders, so gibt es keine Notwendigkeit, erstellen Sie Ihre eigenen Validierungslogik.
InformationsquelleAutor der Antwort Anthony DiSanti
Den nginx-Dokumentation warnt vor der Verwendung, wenn für das umschreiben. Bitte siehe den link hier: http://wiki.nginx.org/Pitfalls#Server_Name
InformationsquelleAutor der Antwort Robert Brown