Umleiten: weiterleiten oder umschreiben?

24.06.2007 In der .htaccess / mod_rewrite Rubrik meines Forums sind Fragen zu einer "Umleitung" von Webseiten mithilfe von Modrewrite an der Tagesordnung. Oft macht der Beitrag eines Threads noch nicht klar, was der Fragesteller eigentlich genau unter einer Umleitung versteht. In der Umgangssprache vieler Webmaster scheinen mit diesem Wort doch zwei recht unterschiedliche Vorgänge bezeichnet zu werden, die ich im folgenden zur besseren Unterscheidung als Weiterleitung bzw. Umschreibung benennen möchte.

1. Weiterleiten zur neuen URL

Die URL eines Inhaltes hat sich geändert. Unter der alten URL soll gewissermaßen als Wegweiser für Suchmaschinenbots und Browser im HTTP-Header eine permanente Weiterleitung auf die neue URL angelegt werden. Letztere muss hierzu in der RewriteRule vollständig angegeben werden, das heißt mit Angabe des Protokolls (http://) und des Hosts; zudem muss ein Flag R=301 gesetzt werden. Das folgende Beispiel zeigt eine permanente Weiterleitung aller Seiten auf eine neue Domain.

Zuerst muss die RewriteEngine eingeschaltet sein - die Angabe der RewriteBase kann je nach Serverkonfiguration erforderlich oder hinderlich sein: RewriteEngine on

RewriteBase /

Dann folgt die eigentliche Rule: RewriteRule ^(.*)$ http://example.org/$1 [R=301]

Browser werden automatisch weitergeleitet: bei Eingabe der alten URL wird nach der Weiterleitung in der Adresszeile die neue URL angezeigt. Sinn mach eine solche Weiterleitung dann, wenn noch Links auf die alten URLs verweisen.

2. Umschreiben der alten URL

Der Inhalt soll unter einer anderen oder weiteren URL verfügbar gemacht werden. Hierzu wird im Gegensatz zur Weiterleitung nicht die vollständige URL angegeben und es wird auch kein R-Flag gesetzt. Beispiel für das Rewriten von dynamischen URLs:

RewriteRule ^(.*).html$ index.php?topic=$1

In diesem Fall wird index.php?topic=bla auch unter der URL bla.html verfügbar gemacht, das heißt bei Eingabe von bla.html wird der Inhalt von index.php?topic=bla angezeigt, wobei bla.html aber in der Adresszeile des Browsers stehen bleibt. Die URLs werden also nicht extern, sondern nur serverintern umgeleitet. In einem zweiten Schritt müssen dann nur noch die Links an die so neu erzeugten URLs angepasst werden. Sinnvoll können solche Maßnahmen z.B. sein, um URLs suchmaschinenfreundlicher zu gestalten.

Externe Inhalte kann man übrigens nicht auf diese Weise unter der eigenen URL einbinden. Ein Einverständnis der jeweiligen Betreiber vorausgesetzt, muss man hier auf alternative Vorgehensweisen zurückgreifen, wie z.B. die Seiten in einem Frameset einzubinden oder über PHP-Funktionern wie file(), fopen() etc.

Weitergehende Fragen zu diesem Thema können auch in meinem Forum gestellt werden.