Domain umleiten: 301-Weiterleitung mit mod_rewrite
Ein immer mal wieder auftretendes Problem bei Webmastern: Ein Projekt soll von einer Domain auf eine andere umziehen und das möglichst “Suchmaschinen-freundlich”, also ohne indexierte Seiten zu verlieren. Eine 301-Weiterleitung ist hier sicher die richtige Wahl. Wenn darüber hinaus aber die alte Domain für ein neues Projekt weiter genutzt werden soll wird’s kompliziert, denn jetzt muss die Weiterleitung unterscheiden: Handelt es sich um eine weiterzuleitende Seite des alten Projektes oder um eine nicht weiterzuleitende des neuen? H.P. Pfeufer stellt für dieses Problem in seinem Artikel “PHP: Teile einer Domain umleiten” eine schöne und leicht umzusetzende Lösung vor. Man kann es in bestimmten Fällen aber auch mit Hilfe von “mod_rewrite” machen, und wie das geht, möchte ich in diesem Artikel, sozusagen ergänzend, beschreiben.
Der Trick mit der Fehlerseite:
H.P’s Lösung basiert auf der http-Fehlermeldung 404 (Not Found) welche er zur Erkennung nicht existierender Seiten nutzt. Ist eine Seite nicht vorhanden ist die Wahrscheinlichkeit groß das es sich um eine Seite des alten Projektes handelt. Folglich wird umgeleitet. Das bedeutet natürlich auch das nicht oder nicht mehr vorhandene Seiten des neuen Projektes ebenfalls umgeleitet werden. Das alte Projekt auf neuer Domain muss also über eine entsprechende 404-Fehlerbehandlung verfügen, da diese nicht existierenden Seiten ja auch auf dem alten Projekt nicht vorhanden sind.
Geht’s auch anders?
In bestimmten Fällen, nämlich dann wenn sich die Seiten- bzw. URL-Struktur des alten und des neuen Projektes in irgend einem Punkt eindeutig unterscheiden, kann man das Problem z.B. auch mit Hilfe des Apache-Moduls “mod_rewrite” lösen.
Nehmen wir als einfaches Beispiel an: Das alte Projekt hatte ausschließlich Seiten deren Endung “.html” lautet, und das neue Projekt besteht nur aus “*.php” -Seiten. In diesem Fall könnte man sich dieses “Erkennungszeichen” zu Nutze machen und eine Rewrite-Regel erstellen die wie folgt aussieht:
RewriteEngine on RewriteRule ^([^/]*)\.html$ http://www.neue-domain.de/$1.html [L,R=301]
Auf diese Weise werden wirklich nur die Seiten des alten Projektes auf die neue Domain umgeleitet, und das Suchmaschinen-freundlich mittels 301-Weiterleitung.
Mit dieser Lösung lässt sich eigentlich jeder eindeutige Unterschied in der Seiten-Struktur des alten und des neuen Projektes ausnutzen. Man muss dazu “nur” die entsprechende Rewrite-Rule erstellen. Hier noch ein paar Beispiele für Unterschiede die man nutzen könnte:
- altes Projekt immer “…/index.php?…“, neues Projekt dagegen “…/seitenname.php“
- altes Projekt immer “…/seitenname.html“, neues Projekt dagegen “…/subdir/seitenname.html“
- altes Projekt immer ohne Endung “…/seitenname“, neues Projekt immer mit Endung “…/seitenname.html“
- altes Projekt immer “*.htm“, neues dagegen immer “*.html“
Insbesondere Punkt 2 und 3 könnten gut passen wenn eines der Projekte z.B. ein WordPress-Blog ist. Es gibt noch etliche weitere denkbare Unterschiede die man für eine selektive 301-Umleitung ausnutzen könnte. Wichtig ist nur daß es einen eindeutigen Unterschied zwischen altem und neuem Projekt gibt.
Gibt’s auch hier ein Fazit?
Klar doch! Viele Wege führen nach Rom und manche davon über mod_rewrite. Und ab und zu bedarf es erst eines interessanten Artikels eines Blog-Kollegen um die eigene Lösung auch endlich mal zu posten.
L,R=301



Das habe ich gerade die Tage gemacht als ich verschiedene Blogs von mir zusammen geführt habe. War recht einfach, hab mich da auf mehr Arbeit eingestellt.
Also das Thema “mod_rewrite” ist für mich persönlich das schwierigste. Irgendwie steige ich da nicht so ganz durch, eben vorallem mit der Domainweiterleitung. Ich versuche das ganze hier mal in die Tat umzusetzen und hoffe es klappt dann auch.