Über mich

Startseite arrow Tipps & Tricks arrow Weiterleitungen - Absolute Grundlagen und Fortgeschrittenes

Weiterleitungen - Absolute Grundlagen und Fortgeschrittenes

Donnerstag, 23. April 2009
Geschrieben von Armin Vieweg
Weiterleitungen findet man im Internet relativ häufig, doch nicht immer entsprechen sie der empfohlenen Vorgehensweise. Warum es teilweise sehr unvorteilhaft sein kann, falsche Weiterleitungen zu verwenden, wird hier erklärt.

Es gibt viele Weiterleitungen. HTTP- oder HTML-Weiterleitungen und JavaScript-Weiterleitungen. Pro Weiterleitungsart gibt es dann nochmal verschiedene Ansätze diese Umzusetzen und Unterscheidungen zwischen den Redirects (Weiterleitung).



Was ist eine Weiterleitung im Internet?
Eine Weiterleitung ist der automatische Aufruf einer neuen Datei (meist Internetseite). Oder etwas lebhafter formuliert, man kommt auf eine Seite wird aber zu einer anderen umgeleitet.

Es gibt viele Anwendungsgebiete dafür, der wohl Schlimmste - aber immer noch häufig verwendete - ist die Weiterleitung von index.html auf z.B. index2.html, weil auf der ersten Datei ein Flash-Intro oder ein sonstiges Intro prangert.


Zwei Weiterleitungs-Arten
Es gibt zwei verschiedene Arten von Weiterleitungen. Eine Weiterleitung die erst dann anfängt zu greifen wenn die Seite komplett fertig geladen ist (HTML oder JavaScript) oder eine Weiterleitung die noch bevor die Seite an den Browser übermittelt wird greift (HTTP-Weiterleitung).



Die HTML-Weiterleitung
Die erste und damals extrem oft verwendete war die "Meta-Refresh"-Weiterleitung. In einem Meta-Tag im Head der Seite, wird eine Anzahl von Sekunden definiert und eine URL. Diese URL wird nach Ablaufen der Sekunden automatisch geladen. Der Ursprung dieser Funktion war die automatische Aktualisierung der Seite wenn man beispielsweise einen Ticker laufen hatte.

Der Meta-Tag sah so aus:

<meta http-equiv="refresh" content="5; url=http://www.google.de/">


Nach 5 Sekunden wird Google geladen (zum Beispiel).


Ebenfalls im Quellcode der Seite konnten JavaScripts eingebettet werden die direkt oder bei Erfüllen verschiedener Bedingungen (wie z.B. einem Timer) eine Umleitung auf eine andere Seite anstoßen. Eine direkte Weiterleitung könnte man z.B. mit JavaScript so lösen:

<body onload="window.location.href = 'http://www.google.de';">



Beide Varianten haben verschiedene Nachteile: Teilweise kann Google die Weiterleitung nicht erkennen, da Google JavaScript scheinbar gänzlich ignoriert - zum anderen muss die Website immer erst komplett geladen werden, bis dann die Weiterleitung angestoßen wird.

Mittlerweile haben sich andere Weiterleitungen eingebürgert bei denen man mehr Auswahl an Optionen hat.


Die HTTP-Weiterleitung
Wenn ich eine Seite im Internet aufrufe, sagt mein Browser dem Server der Internetseite "Ich möchte diese Datei von Dir bekommen". Der Server prüft verschiedene Kriterien und übersendet dem Browser dann letztendlich die Datei zum Anzeigen der Seite und anschließend die darauf befindlichen Bilder und Elemente.

Man kann bereits diesen Prozess beeinflussen, in dem der Server nicht das angeforderte Dokument (bzw. Datei) liefert sondern dem Browser mitteilt, dass es eine Umleitung gibt. Die Browser folgen dieser Weiterleitung dann meist ungefragt.

Es gibt verschiedene Weiterleitungen, diese werden mit Nummern versehen.
Die bekannteste ist wohl die 301 Weiterleitung.


Die verschiedenen Weiterleitungs-Codes
404 kennt jeder. Das steht für "File not found", also "Datei nicht gefunden" und kommt immer dann, wenn man versucht eine Datei anzufordern, die nicht existiert. 401 ist auch noch sehr geläufig und kommt immer dann, wenn man keinen Zugriff auf eine Datei hat, weil die Authentifizierung fehlt.

Moment?! Was hat das mit Weiterleitungen zu tun?
Es handelt sich dabei um HTTP-Codes und Weiterleitungen sind nichts anderes als solche Codes.

301 steht dabei für "Moved Permanent", also die Umleitung ist permanent und wird auch in Zukunft so bleiben. 307 wäre das momentane Gegenstück: "Moved Temporary" (307 ist korrekt, häufig verwendet wird jedoch 302). Die kompletten HTTP-Codes findet man in dem Wikipedia-Artikel, mit einer guten Erklärung.

Diese Unterschiede sind wichtig für Google und Co. Dem Nutzer selbst kann es ziemlich egal sein ob es eine 301, 302 oder gar eine 307 Weiterleitung ist, zumal er den Unterschied niemals sieht.

Google weiß aber ob die indexierte URL sich geändert hat und ändert das entsprechend in ihrem Index, sofern die Umleitung permanent ist.


Zur Praxis: Wie erstellt man solche HTTP-Weiterleitungen

Es gibt nur zwei Möglichkeiten: Über PHP oder einer .htaccess-Datei.

Eine 301-Weiterleitung in PHP sieht z.B. so aus:

header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.professorweb.de");



Der Befehl "Header" greift auf den HTTP-Header zu, also dem was der Server unserem Browser sagt. Man kann darüber viele Informationen verwalten unter anderem eben auch Weiterleitungen.

/!\ Der Header-Befehl kann innerhalb von PHP jedoch nur dann verwendet werden, wenn noch nichts ausgegeben wurde (mit z.B. echo oder print). Eine Ausgabe in PHP setzt einen HTTP-Header voraus. Ein Ändern des bereits versendeten Headers ist nicht möglich, da er vom Browser schon empfangen wurde. PHP fängt dies ab und gibt dann einen Fehler aus.


.htaccess Weiterleitung
Die 301 Weiterleitung in .htaccess kann verschieden sein. Es gibt viele Wege nach Rom. Man kann die Weiterleitung auf alle Dateien eines Ordners beschränken oder explizite Regeln anwenden, dass z.B. Benutzer einer bestimmten IP weitergeleitet werden und alle anderen nicht.

Die aber wahrscheinlich häufig benutzte .htacces Verwendung ist das Weiterleiten von nicht www. auf www.

Gebe ich im Browser "professorweb.de" ein, leitet er automatisch weiter auf "www.professorweb.de". Das ist wichtig für die Verwendung von Cookies, denn mit www. ist eine andere Domain als ohne und Cookies werden immer an die Domain gebunden. Suchmaschinenoptimierer sagen, dass dies auch wichtig für Google sei, wobei Google selbst in den Webmaster Tools schreibt, dass sie wenn es keine explizite Regel gibt sie das Logischste nehmen.

Der Code innerhalb der .htaccess Datei hierfür sieht so aus:

rewritecond %{http_host} !^www\.
rewriterule ^(.*)$ /$ 1 [r=301]



Rewritecond (also die Bedingung) das der http_host (also der Domain) nicht mit www. beginnt. Das es damit beginnen muss wird durch den Haken (^) definiert und das "nicht" durch das Ausrufezeichen (!). Das Backslash vor dem Punkt ist wichtig, da der Punkt ansonsten für ein beliebiges Zeichen zählt. Der Backslash lässt den Punkt ein tatsächlicher Punkt sein.

Ist diese Bedingung nun also erfüllt wird alles hinter dem http_host in eine Variable geschrieben ( ^(.*)$ ) dann wird die gewollte Domain geöffnet und das was dort hinter geschrieben wurde drangehangen (durch das $1, das Leerzeichen dazwischen ist nur hier wegen einem Anzeigefehler notwendig).

Das es eine 301 Weiterleitung ist wird nur noch am Rande über ein entsprechendes "Flag" gesetzt: [r=301]

Damit kann man die Seite
professorweb.de/impressum.html
aufrufen und wird auf
www.professorweb.de/impressum.html
weitergeleitet und nicht auf die Startseite, da das vorher eingegebene ja dran gehangen wird.

Diese Regeln werden mit Regulären Ausdrücken gestaltet, daher die etwas zeichenlastige Schreibweise. Arbeitet man damit aber häufiger, geht einem das in Fleisch und Blut über :)


Eine einfachere Möglichkeit mit .htaccess eine Regel zu machen ist durch folgenden Befehl:

Redirect permanent /alteseite.html http://www.neue-domain.de/neueseite.html


Oder wenn man keine Eingeschränkung haben möchte und alles weitergeleitet haben will, geht auch dieser Code hier:

Redirect 301 / http://www.neue-domain.de/





So viel mal zu der Thematik, ihr seht man kann eine Menge darüber schreiben und das Ausschweifen auf die damit zusammenhängenden Themengebiete (wie Reguläre Ausdrücke) ist auch nicht schwierig.

Mehr zu dem Thema habe ich in einem älteren Artikel auf Professor Web verfasst.
.htacces und modRewrite


  Kommentare (2)
 1 Geschrieben von: Kim Korte, am 25.04.2009 um 15:23
Guter Artikel, weiter so! :>
 2 Geschrieben von: Ramon, am 29.08.2010 um 22:43
super beschrieb, hat ein bookmark meinerseits verdient ;-) übrigens kann in den webmastertool die bevorzugte domain gewählt werden. diese sollt dann auch in den Backlinks verwendet werden.
Letzte Aktualisierung ( Mittwoch, 24. Juni 2009 )
 
Weiter >