Eine Weiterleitung (englisch forward) oder Umleitung (englisch redirect) im World Wide Web wird dazu verwendet, den Aufruf einer URL (z. B. Besuch einer Webseite) zu einer anderen URL zu führen. Eine Weiterleitung kann z. B. nach einem Umzug oder Umbau einer Website nützlich sein, um Besucher einer veralteten URL nicht ins Leere laufen zu lassen.
Für die technische Umsetzung von Weiterleitungen gibt es verschiedene Möglichkeiten:
HTTP bietet die Möglichkeit, über das Header-Feld Location
auf eine andere URL zu verweisen. Damit wird der Webbrowser angewiesen, die angegebene URL zu laden. Dies wird begleitet durch einen 30x-Statuscode. Es gibt verschiedene Statuscodes für Weiterleitungen unterschiedlicher Intention und technischer Spezifikation.
Statuscodes für Weiterleitungen sind spezifiziert in RFC 7231[1] sowie RFC 2616[2] (HTTP/1.1). Verschiedene HTTP-Statuscodes für Weiterleitungen werden von Browsern und Suchmaschinen entsprechend unterschiedlich interpretiert. Bezüglich der Intention kann unterschieden werden zwischen temporären und permanenten Weiterleitungen. Die technische Spezifikation unterscheidet bei Aspekten wie Caching und Request-Methode für die Ziel-URL der Weiterleitung.
Die folgende Tabelle zeigt alle Statuscodes zur Weiterleitung und ihre technischen Spezifikationen:[3]
HTTP-Statuscode | HTTP-Version | Temporary / Permanent | Cachebar | Request-Methode zweiter Request |
---|---|---|---|---|
301 | HTTP/1.0 | Permanent | ja | GET / POST kann sich ändern |
302 | HTTP/1.0 | Temporary | nicht per Default | GET / POST kann sich ändern |
303 | HTTP/1.1 | Temporary | niemals | Immer GET |
307 | HTTP/1.1 | Temporary | nicht per Default | wie erster Request |
308 | HTTP/1.1 | Permanent | ja | wie erster Request |
Das folgende Beispiel zeigt den HTTP-Header mit 301 Statuscode:
HTTP/1.1 301 Moved Permanently
Location: http://www.example.org/
...
Im folgenden Beispiel wird der HTTP-Header für eine Weiterleitung mit Statuscode 301 durch ein PHP-Programm gezeigt:
<?php
header("HTTP/1.1 301 Moved Permanently");
header("location: http://example.org/");
exit;
?>
Ohne spezifizierte Angabe eines Statuscodes, wird in PHP der 302 Statuscode verwendet. Beispiel:
<?php
header("location: http://example.org/");
exit;
?>
Für Nutzer eines Apache-Webservers, die keinen Zugriff auf die Serverkonfiguration haben, bei denen dennoch .htaccess aktiviert ist, ist es möglich, die Weiterleitung der Domain via .htaccess vorzunehmen. Eine .htaccess-Datei wird bei dieser Art von Weiterleitung mit Punkt und Endung in das Root-Verzeichnis des jeweiligen Webspace eingefügt. Um permanent (vgl. 301-Redirect) jede Anfrage an z. B. example.net
auf die Subdomain www.example.net
zu leiten, müsste die .htaccess-Datei folgendermaßen aussehen:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.example\.net$ [NC]
RewriteRule ^(.*)$ http://www.example.net/$1 [R=301,L]
Wer umgekehrt von der Subdomain www.
auf die Hauptdomain weiterleiten möchte, der müsste den Code folgendermaßen anpassen:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.example.net$ [NC]
RewriteRule ^(.*) http://example.net/$1 [R=301,L]
HTML erlaubt eine Weiterleitung per Meta-Tag, Meta Refresh genannt. Dabei wird der Webbrowser angewiesen, die Seite nach vorgegebener Zeit zu aktualisieren oder eine andere URL zu laden.
Mit folgendem Befehl in dem Kopfbereich der HTML-Datei setzt man eine Weiterleitung per Meta Refresh:
<meta http-equiv="refresh" content="5; URL=http://www.example.org">
Hier bei wird man nach 5 Sekunden auf die URL http://www.example.org/
weitergeleitet.[4]
Diese Art der Weiterleitung wird vom W3C-Konsortium allerdings nicht empfohlen, und zwar aus folgenden Gründen: Erstens wird die Seite, auf der sich die Meta-Angabe zur Weiterleitung befindet, komplett geladen, sodass sie komplett einsehbar ist. Zweitens wird der Benutzer, wenn er nach erfolgreicher Weiterleitung auf den Zurück-Button klickt, sofort wieder weitergeleitet.[5]
In HTML kann man sogenannte Frames verwenden, um den Inhalt anderer Webseite eingebettet anzuzeigen. Hierbei handelt es sich um eine Art Rahmen, in dem mehrere Webseiten (HTML-Dokumente) dargestellt werden können. In der Adresszeile des Browsers bleibt die ursprüngliche URL weiterhin sichtbar.
Dabei gibt es auch die Möglichkeit Inhalte von fremden Webseiten einzubinden, ohne sie von ihrer Ursprungsseite entfernen zu müssen, indem man einfach die Seite als Frame einbindet (z. B. einen Wikipedia-Artikel). Allerdings gibt es zurzeit noch keine einheitliche Regelung, ob das Einbinden fremder Webseiten verboten ist oder nicht.
Per JavaScript ist es möglich, den Webbrowser anzuweisen, zu einer bestimmten URL zu navigieren.
Beispiel:
<script type="text/javascript">
window.location.href = "http://www.example.org/";
</script>
Bei MediaWiki können Weiterleitungen angelegt werden. In diesem Fall enthält der Artikel keinen Inhalt, sondern nur die Anweisung der Weiterleitung auf eine andere Artikelseite. Im Unterschied zu den vorangegangenen Beispielen erfolgt dabei die Weiterleitung intern über die Wiki-Engine und nicht über den Browser.
Mit folgendem Befehl setzt man eine interne Weiterleitung in einem Mediawiki-Artikel:
#WEITERLEITUNG [[Hauptseite]]
Statt #WEITERLEITUNG
funktionieren auch #Weiterleitung
, #weiterleitung
, #REDIRECT
, #Redirect
und #redirect
.[6]
Hierbei wird man beim Aufruf der Seite auf die Hauptseite des betroffenen Wikis weitergeleitet.[6]