301 Weiterleitung einer Website per mod-rewrite
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.
Die Technik
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:
# 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
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://neue-domain.de/">here</a>.</p>
</body></html>
Connection closed by foreign host.
mod_rewrite – die Lösung
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 <suchmuster> <ersatz>
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.
Andere Möglichkeiten einer Weiterleitung
Ist mod_rewrite nicht installiert, oder keine Berechtigung zur Benutzung gegeben, müssen andere Lösungen her.
Weiterleitung mit PHP
Mit PHP könnte man oben beschriebene Weiterleitungen mit Hilfe der header-Funktion lösen.
<?php
header('HTTP/1.1 301 Moved Permanently', true);
header('Location: http://www.neue-url.de/pfad/zur/datei.htm', true);
?>
Weiterleitung mit Perl / CGI
Auch mit Perl könnte man die Weiterleitung mit Hilfe eines Headers direkt per print lösen:
#!/usr/bin/perl print "HTTP/1.1 301 Moved Permanentlyn"; print "Location: http://www.neue-url.de/pfad/zur/datei.htmn";
Weiterleitung mit Ruby
In Ruby kann man dies zum Beispiel so realisieren:
#!/usr/bin/env ruby
require 'cgi'
cgi.header({'HTTP/1.1 301 Moved Permanently','Location'=>'http://www.neue-url.de/pfad/zur/datei.htm'})
Clientseitig ohne 301-Status: Javascript
Eine clientseitige Weiterleitung könnte mit Javascript realisiert werden. Nachteil ist hier, das bei deaktiviertem Javascript die Weiterleitung nicht funktioniert.
<script type="text/javascript">
<!--
window.location.replace("http://www.neue-url.de/pfad/zur/datei.htm");
// -->
</script>
Clientseitig ohne 301-Status: Weiterleitung per Meta-Tag
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 Javascript Interpretationssache des Browsers ist, diesen tag zu beachten (Wobei alle Standard-Browser dies tun).
<head> <meta http-equiv="refresh" content="3; url=http://www.neue-url.de/pfad/zur/datei.htm"> <!-- andere Tags im Header --> </head>
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.
Happy Redirecting!




Hola! Ich bin Nico und du liest gerade meinen Blog über Webentwicklung, Webdesign, Linux und alles was mit dem Internet zu tun hat. Seit 1997 entwickle ich Websites und habe in dieser Zeit in den verschiedensten Bereichen gearbeitet. Ob nun Webdesign, Software-Entwicklung, Server-Administration, Marketing und SEO, alles macht Spaß und ergänzt sich wunderbar. Neben diesem Blog betreibe ich noch diverse andere Projekte wie zum Beispiel die
[...] Im Internet findet man einige sehr schöne Artikel zu dem Thema. Mir persönlich hat der Artikel 301 Weiterleitung einer Website per mod-rewrite sehr [...]