Best Practice: separat servermit fest codiertserver_name
Die beste Vorgehensweise bei Nginx besteht darin, serverfür eine solche Umleitung eine separate zu verwenden (die nicht mit der serverHauptkonfiguration 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 serverwü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- wwwto wwww / regex in einer dedizierten Single serverfür alle Sites:
server {
server_name ~^(?!www\.)(?<domain>.+)$;
return 301 $scheme://www.$domain$request_uri;
}
wwwzu non- wwww / regex in einer dedizierten Single serverfür alle Sites:
server {
server_name ~^www\.(?<domain>.+)$;
return 301 $scheme://$domain$request_uri;
}
wwwzu nicht wwww / 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.comund 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 pcretestauf Ihrem System wie erwartet funktioniert. Dies ist genau dieselbe pcreBibliothek, 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 ifvorhandenem 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 serverDefinitionen 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 wwwzu www:
if ($host ~ ^(?!www\.)(?<domain>.+)$) {
return 301 $scheme://www.$domain$request_uri;
}
wwwzu 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 servermö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 Settingsund stellen Sie sicher, dasswwwdie 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.