Best Practice: separat server
mit fest codiertserver_name
Die beste Vorgehensweise bei Nginx besteht darin, server
für eine solche Umleitung eine separate zu verwenden (die nicht mit der server
Hauptkonfiguration geteilt wird), alles fest zu codieren und überhaupt keine regulären Ausdrücke zu verwenden.
Es kann auch erforderlich sein, die Domänen fest zu codieren, wenn Sie HTTPS verwenden, da Sie im Voraus wissen müssen, welche Zertifikate Sie bereitstellen.
server {
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
server {
server_name www.example.org;
return 301 $scheme://example.org$request_uri;
}
server {
server_name example.com example.org;
# real configuration goes here
}
Verwenden von regulären Ausdrücken innerhalb von server_name
Wenn Sie über eine Reihe von Websites verfügen und sich nicht für die ultimative Leistung interessieren, aber möchten, dass jede einzelne von ihnen dieselbe Richtlinie in Bezug auf das www.
Präfix hat, können Sie reguläre Ausdrücke verwenden. Die beste Vorgehensweise bei der Verwendung eines separaten Geräts server
würde weiterhin bestehen bleiben.
Beachten Sie, dass diese Lösung schwierig wird, wenn Sie https verwenden, da Sie dann über ein einziges Zertifikat verfügen müssen, um alle Ihre Domain-Namen abzudecken, damit dies ordnungsgemäß funktioniert.
non- www
to www
w / regex in einer dedizierten Single server
für alle Sites:
server {
server_name ~^(?!www\.)(?<domain>.+)$;
return 301 $scheme://www.$domain$request_uri;
}
www
zu non- www
w / regex in einer dedizierten Single server
für alle Sites:
server {
server_name ~^www\.(?<domain>.+)$;
return 301 $scheme://$domain$request_uri;
}
www
zu nicht www
w / regex in einem dediziertenserver
nur für einige Sites :
Es kann erforderlich sein, den regulären Ausdruck so einzuschränken, dass er nur einige Domänen abdeckt. Dann können Sie so etwas verwenden, um nur Übereinstimmungen zu erzielen www.example.org
, www.example.com
und www.subdomain.example.net
:
server {
server_name ~^www\.(?<domain>(?:example\.org|example\.com|subdomain\.example\.net))$;
return 301 $scheme://$domain$request_uri;
}
Testen regulärer Ausdrücke mit Nginx
Sie können testen, ob der reguläre Ausdruck pcretest
auf Ihrem System wie erwartet funktioniert. Dies ist genau dieselbe pcre
Bibliothek, die Ihr Nginx für reguläre Ausdrücke verwendet:
% pcretest
PCRE version 8.35 2014-04-04
re> #^www\.(?<domain>(?:example\.org|example\.com|subdomain\.example\.net))$#
data> test
No match
data> www.example.org
0: www.example.org
1: example.org
data> www.test.example.org
No match
data> www.example.com
0: www.example.com
1: example.com
data> www.subdomain.example.net
0: www.subdomain.example.net
1: subdomain.example.net
data> subdomain.example.net
No match
data> www.subdomain.example.net.
No match
data>
Beachten Sie, dass Sie sich keine Gedanken über nachfolgende Punkte oder Groß- und Kleinschreibung machen müssen, da sich nginx bereits darum kümmert, wie es der Nginx-Servername Regex sagt, wenn der "Host" -Header einen nachgestellten Punkt hat .
Mit if
vorhandenem server
/ HTTPS bestreuen:
Diese endgültige Lösung wird im Allgemeinen nicht als bewährte Methode angesehen, funktioniert jedoch weiterhin und erledigt die Aufgabe.
Wenn Sie HTTPS verwenden, ist diese endgültige Lösung möglicherweise einfacher zu warten, da Sie nicht eine ganze Reihe von SSL-Anweisungen zwischen den verschiedenen server
Definitionen kopieren und einfügen müssen und stattdessen nur die Snippets darin platzieren können die benötigten Server, um das Debuggen und Verwalten Ihrer Websites zu vereinfachen.
nicht www
zu www
:
if ($host ~ ^(?!www\.)(?<domain>.+)$) {
return 301 $scheme://www.$domain$request_uri;
}
www
zu nicht- www
:
if ($host ~ ^www\.(?<domain>.+)$) {
return 301 $scheme://$domain$request_uri;
}
Hardcodierung einer einzelnen bevorzugten Domäne
Wenn Sie ein bisschen mehr Leistung sowie Konsistenz zwischen mehreren Domänen wünschen, die eine einzelne server
möglicherweise verwendet, ist es möglicherweise dennoch sinnvoll, eine einzelne bevorzugte Domäne explizit fest zu codieren:
if ($host != "example.com") {
return 301 $scheme://example.com$request_uri;
}
Verweise:
Dashboard > Settings > General Settings
und stellen Sie sicher, dasswww
die URLs der WordPress-Adresse / Site-Adresse keine enthalten . Unabhängig davon, wie Sie Ihren Nginx konfigurieren, wird ein WWW in diesen URLs zu dem mit dem WWW umgeleitet.