Umziehen Part 2: 301 mit RedirectPermanent

Weil das gerade so schön durch Abakus durchwabert und ich ja im ersten Teil dieser kleinen Serie strikt davon abgeraten habe, 301-Umleitungen mit RedirectPermanent zu machen, hier noch ein paar ergänzende Worte dazu:

In Teil 1 ging es mir darum, dass schlicht und ergreifend die Domain gewechselt werden, die Inhalte des Auftritts aber brav an der alten Stelle bleiben sollen. RedirectPermanent hilft hier nicht weiter. Der Eintrag in der .htaccess

1
	RedirectPermanent / http://seorockstar.de/

würde wieder auf diesen Auftritt verweisen. Wir würden uns also eine Endlosschleife bauen. Wir brauchen also eine Überprüfung, ob die URL, unter der der Auftritt erreicht wird, überhaupt unterschiedlich zu der ist, zu der wir umleiten wollen. Und das geht schlicht und ergreifend nur mit mod_rewrite und der RewriteCond.

Für was ist dann aber RedirectPermanent überhaupt nützlich?

Beispielsweise dann, wenn man auf eine Domain verweist, die sich mit dieser nicht das physikalische Verzeichnis teilt, man also nicht erst prüfen muss, welche Domain der Besucher aufgerufen hat, bietet sich RedirectPermanent an. Im Vergleich zu mod_rewrite hat eine mod_alias-Lösung nämlich vor allem Performancevorteile, weil nicht erst die RewriteEngine gestartet und Ressourcen zehrend ein regulärer Ausdruck darauf hin überprüft werden muss, ob er zutrifft oder nicht. Auch ist mod_alias in der Lage, den Pfad-Teil der Domain korrekt anzuhängen, der Besucher wird also nicht einfach auf die Startseite geworfen, wenn die Umleitung greift.

Umziehen Part 1: 301

Die Gründe dafür sind vielfältig: Die neue Firmen-CI ist allergisch auf Bindestriche, auch in Domainnamen, man hat sich an der Domain für sein privates Blog sattgesehen oder will mal den großen Subdomain-Aufstand proben. Also registriert man eine neue Domain und zieht den bestehenden Webauftritt dahin um.

Soweit die Theorie. Aber das soll natürlich nicht dazu führen, dass plötzlich alle Links von anderen Seiten oder auch aus den SERPs ins Leere laufen, gleichzeitig soll aber der Auftritt auch nicht unter beiden Domains erreichbar sein – und sei es nur die Startseite, weil moderne CMS- und Blogginglösungen das spätestens ab der zweiten Ebene wieder gerade biegen.

Die Lösung lautet: 301. Wikipedia weiß dazu:

Die angeforderte Ressource steht ab sofort unter der im „Location“-Header-Feld angegebenen Adresse bereit. Die alte Adresse ist nicht länger gültig.

Also genau das, was wir wollen. Immer wieder stolpert man darüber, dass man das mit der Apache-Direktive RedirectPermanent machen soll, aber dazu kann man nur sagen: Finger weg! RedirectPermanent ist Teil von mod_alias und unterstützt daher keine regulären Ausdrücke und keine Bedingungen, wann eine Regel greift und wann nicht. Aber nur damit macht das ganze eigentlich richtig Spaß, wobei bei der Umleitung einer kompletten Domain auf eine andere das ganze auch mit regulären Ausdrücken nicht wirklich kompliziert ist:

1
2
3
4
5
6
<IfModule mod_rewrite.c>
RewriteEngine On
 
RewriteCond %{HTTP_HOST} !^www.notaseo.de$
RewriteRule ^(.*)$ http://www.notaseo.de/$1 [L,R=301]
</IfModule>

Die erste Zeile prüft zunächst, ob mod_rewrite überhaupt verfügbar ist. Was mittlerweile bei so ziemlich jedem Provider der Fall sein dürfte. Die zweite schaltet die Umschreibemaschinerie an. Zeile drei ist eine Bedingung, die prüft, ob der Host, mit dem die Website aufgerufen wurde, nicht www.notaseo.de ist – nur dann greift die nachfolgende Regel, die einfach alles, was nach dem Host kommt, nimmt, in eine Variable $1 schreibt und auf die Zieldomain umleitet. Die Angaben in Klammern sagen aus, dass danach, sollte die Datei weitere Regeln beinhalten, diese nicht mehr abgearbeitet werden (L wie Last) und die Umleitung (R wie Redirect) per 301 erfolgen soll.

Das ganze hat noch einen angenehmen Nebeneffekt: Aufrufe ohne www oder mit irgendwelchen anderen Subdomains leiten immer sauber auf die eigentliche Domain um und man stellt so sicher, dass eine Ressource unter einer kanonischen URL erreichbar ist.

Tut man das ganze aufgrund eines Domainwechsels und nicht, um die Kanonizität sicherzustellen sollte man natürlich anschließend noch versuchen, Backlinks auf die alte Domain durch die Webmaster ändern zu lassen. Schließlich will man die alte Domain auch irgendwann mal kündigen.

Prüfen, ob alles so funktioniert wie gedacht und auch der richtige Statuscode zurückgegeben wird kann man solche Sachen mit diversen Online- und Offlinetools, etwa dem Web-Sniffer oder dem HTTP Client.