Wenn sich die Domain oder Url einer Website geändert hat, empfiehlt sich eine Weiterleitung auf die neue Adresse mit dem HTTP-Statuscode 301 (Moved Permanently). Der Code 301 deshalb, damit auch Suchmaschinen wie Google wissen, das sich die Adresse für immer geändert hat und nur die neue Url verwendet werden soll. Google berücksichtigt hier auch den Pagerank und ordnet diesen der neuen URL zu.
Technisch gesehen werden vom Webserver im HTTP 2 Zeilen an den Client (Nutzer mit Browser, Suchmaschine) gesendet. Eine mit dem Statscode und eine mit dem Ziel der Weiterleitung:
HTTP/1.1 301 Moved Permanently
Location: http://www.neue-url.de/pfad/zur/datei.htm
Eine HTTP-Sitzung per Telnet auf Port 80 sieht dann zum Beispiel so aus:
The document has moved here.# telnet alte-domain.de 80
Trying 12.34.56.78...
Connected to alte-domain.de.
Escape character is '^]'.
GET / HTTP/1.1
Host: alte-domain.de
HTTP/1.1 301 Moved Permanently
Date: Thu, 25 Feb 2009 20:06:55 GMT
Server: Apache/2.2.11
Location: http://neue-domain.de/
Content-Length: 225
Connection: close
Content-Type: text/html; charset=iso-8859-1
Moved Permanently
Connection closed by foreign host.
Um dies mit Hilfe des Webservers Apache zu lösen, hilft uns das Modul Rewrite, kurz mod_rewrite. Hat man Zugriff auf die Konfigurationsdatei des Webservers, kann man die Rewrite-Weiterleitung im VirtualHost, in der Directory– oder Location-Direktive vornehmen. Anonsten erstellt man eine .htaccess-Datei und nimmt die Konfiguration hier vor.
Um mod_rewrite zu aktivieren, benötigen wir folgende zwei Zeilen:
RewriteEngine on
RewriteBase /
Die erste Zeile aktiviert das Modul und die zweite setzt den Basis-Pfad, für den die folgende Rewrite-Konfiguration dienen soll. Möchten wir beispielsweise nur für das Verzeichnis /homepage/blog/ eine Weiterleitung erstellen, benötigen wir folgende Einstellung:
RewriteEngine on
RewriteBase /homepage/blog/
Als nächstes definieren wir unsere Regel für die Weiterleitung. Diese beinhaltet das Suchmuster und den Ersatz, d.h. die Original-Url und die neue Adresse der URL-Weiterleitung. Das tolle ist, das hier Reguläre Ausdrücke verwendet werden können. Die Syntax ist wie folgt:
RewriteRule
Eine Domain-Weiterleitung mit mod_rewrite würde zum Beispiel so aussehen:
RewriteRule ^(.*)$ http://www.neuedomain.de/$1 [R=301,L]
Eine Weiterleitung eines Verzeichnisses so:
RewriteRule ^homepage/blog(.*)$ http://www.neuedomain.de/homepage/blog$1 [R=301,L]
Das mit dem Modul Rewrite noch mehr Möglichkeiten z.B. dynamischer Weiterleitungen bestehen, verdeutlicht folgendes Beispiel:
RewriteRule ^([a-z\-]+)/([a-z\-]+)/(.*)$ http://www.neuedomain.de/$3?site=$1&sub=$2 [R=301,L]
Jede Regel ist aber vorher gut zu durchdenken, da bei Fehlkonfiguration die Performance des Apache in Mitleidenschaft gezogen oder sogar zum Absturz, z.B. durch Endlosschleifen, gebracht werden kann. Mehr Informationen und viele Möglichkeiten mehr gibt es in der mod_rewrite Apache-Doku.
Ist mod_rewrite nicht installiert, oder keine Berechtigung zur Benutzung gegeben, müssen andere Lösungen her.
Mit PHP kann man oben beschriebene Weiterleitungen mit Hilfe der header-Funktion lösen.
Auch mit Perl kann man die Weiterleitung mit Hilfe eines Headers direkt per print lösen:
#!/usr/bin/perl print "HTTP/1.1 301 Moved Permanently\n"; print "Location: http://www.neue-url.de/pfad/zur/datei.htm\n";
In Ruby kann dies so realisiert werden:
#!/usr/bin/env ruby require 'cgi' cgi.header({ 'HTTP/1.1 301 Moved Permanently', 'Location'=>'http://www.neue-url.de/pfad/zur/datei.htm' })
Eine clientseitige Weiterleitung könnte mit Javascript realisiert werden. Nachteil ist hier, das bei deaktiviertem Javascript die Weiterleitung nicht funktioniert.
Hierfür wird im Head Bereich des HTML-Codes ein Meta-Tag eingefügt, der durch Semikolon getrennt die Zeit angibt, die der Browser bis zur Weiterleitung warten soll und die URL des Ziels der Weiterleitung. Auch diese Methode empfehle ich nicht, da dies wie auch bei Javascript Interpretationssache des Browsers ist, diesen Tag zu beachten. Bei allen aktuellen Standard-Browsern wie Firefox, Safari, Chrome und Safari ist dies jedoch der Fall.
Meine Empfehlung: Immer mod-rewrite nutzen, da serverseitig, gut konfigurierbar und vielseitig einsetzbar. Sollte dies nicht vorhanden oder möglich sein, können die anderen genannten Möglichkeiten einer Weiterleitung (PHP oder andere serverseitige Script- bzw. Programmiersprache, Javascript, Meta-Tag – in der Reihenfolge) weiterhelfen.
Welche Techniken nutzt Du? Wir freuen uns über Kommentare und wenn Du diesen Beitrag über Twitter teilst!
Happy Redirecting!
Brandt Aktuell - Umstellung von einer Subdomain auf eine Top-Level-Domain - Brandt Aktuell
Was denkst du?