Wenn man einen Server administriert, für eigene oder fremde Seiten verantwortlich ist und dann lobenswerterweise auch noch auf nginx als Webserver setzt, wird man hin und wieder vor das Problem der www-Subdomains gestellt. Die einen wollen gerne die Domain mit www vorne dran, die anderen mögen die zeitgemäße Methode ohne www. In jedem Fall sollen keine potenziellen Besucher abgeschreckt werden, weshalb je nach Wunsch in die funktionierende Richtung eine Weiterleitung gemacht werden soll. Nun ist es recht einfach eine Weiterleitung von meinetwegen http://www.maltris.org auf https://maltris.org zu realisieren.
Wählt man aber den einfachsten Weg, muss man manchmal mit Nachteilen rechnen. Realisiert man eine vHost-weite Weiterleitung von allen Anfragen an http://www.maltris.org, so wird beispielsweise auch die Anfrage an http://www.maltris.org/wichtiges_html_dokument.html nur an https://maltris.org umgeleitet. Der Nutzer muss nun den Inhalt finden – es gibt hier drei mögliche Fälle: A) er ist zu faul, springt ab und sucht auf einer anderen Seite weiter oder B) er sucht auf der Seite und findet den Inhalt oder C) betätigt den Zurück-Button und ist intelligent genug die URL zu kopieren und das www. manuell zu entfernen. Ich möchte die Nutzer hier nicht beleidigen – ich schreibe nur aus persönlicher Empirie. Wenn ich etwas nicht gleich finde, dann mache ich zu und suche woanders weiter. aus Zeitersparnis und geringerem zu erwartendem Arbeitsaufwand.
In den vHost-Konfigurationsdateien von nginx verwendet man für die vollständige und korrekte Weiterleitung von www zur Domain ohne www:
server {
listen [::]:80;
server_name www.maltris.org;
return 301 $scheme://maltris.org$request_uri;
}
Und andersherum, also Domain ohne www zur Domain mit www:
server {
listen [::]:80;
server_name maltris.org;
return 301 $scheme://www.maltris.org$request_uri;
}
Eine kurze Erklärung:
server { }
Öffnet uns einen vHost-Konfigurationsblock in den wir jegliche Konfiguration für den jeweiligen vHost angeben können.
listen [::]:80;
Definiert auf welchem Port gelauscht werden soll. Kann gegebenenfalls ein bisschen anders aussehen bei euch, ist hier schon für IPv6 und IPv4 Doppelbetrieb eingerichtet.
server_name maltris.org;
Definiert die Domain (den Servernamen) für die Server-Instanz.
return 301 $scheme://www.maltris.org$request_uri;
Gibt als HTTP-Header ein 301 “Permanently moved” (permanent verschoben) und leitet zum in “$request_uri” definierten Pfad um. “$scheme” definiert die Art der Verbindung – ob ftp, http ohne SSL oder http mit SSL usw. “$request_uri” ist der angefragte Pfad, welcher in der Anfrage an den Webserver geschickt wurde und nun korrekt umgeleitet werden soll.
Diese Art von Konfiguration eignet sich übrigens auch um bei einem Umzug von einer Domain zur anderen eine Weiterleitung einzurichten. Google mag sowas und ein “Permanently moved” soll im Allgemeinen dafür sorgen, dass Google erkennt, dass die Seite umgezogen wurde und viel Seitenstärke weitervererbt.