Logo - 5.120 Bytes

Serverside Redirect

Bei Beachtung der teils bereits beim clientside Redirect erwähnten Netiquette und den auf einem Webserver durch normale Konfigurationen gegebenen Möglichkeiten, sinnvolle Statuscodes zurückzugeben, ist der serverside Redirect die professionellste Weiterleitungs-Methode.

Image, 11.83 KBSollte es Ihnen Ihr Provider oder Webmaster gestatten, gibt es auch hier verschiedene Praktiken, einen serverseitigen Redirect mittels PHP, Perl, ASP, Coldfusion auf Protokoll-Ebene umzusetzen.

Wer in PHP Sessionverwaltungen oder Cookies einsetzt, sollte sich allerdings mit den Einstellungen seiner php.ini auseinandergesetzt haben und wissen, was er dabei genau macht, da er sonst wohl nur einen Brei aus Warnings und Statuscodes verursachen wird.

Idealerweise sollten Sie die folgenden Beispiele erst einmal auf einer Testumgebung und nicht auf Webseiten oder Webservern durchspielen, die sich im Livebetrieb befinden. Administration von Apache-Webservern haben sicher Verständnis für diese Randbemerkung (-;.

PHP Redirect / PHP-Weiterleitung:

Auch mit PHP lässt sich einen Redirect durch ein recht einfaches Script effizient umsetzen. Die Funktion header() wird zum Versenden von HTTP Anfangsinformationen verwendet. Deshalb wird diese Funktion auch für die Behandlung von Redirects genutzt.
Standardmäßig wird eine 302 Weiterleitung verwendet.

Die Informationen werden im Rohformat gesendet. Der Anweisungsblock zur Weiterleitung muss explizit an erster Stelle stehen, da sonst etwaige Headerinformationen gesendet werden. Bei diesem Fehler quittiert PHP den Dienst mit der Meldung "Header already send"…

Beispiel 1:

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://www.websmith.de");
exit();
?>

Dieses Beispiel zeigt Ihnen stark vereinfacht den Ablauf eines 301 Redirects in PHP.

  • In der ersten Headeranweisung wird der Statuscode der Weiterleitung festgesetzt.
  • Der Statuscode 301 gibt eine permanente Umleitung zurück, da sonst standardmäßig eine 302 Weiterleitung verwendet wird.
  • In der zweiten Anweisung wird die neue Zieladresse des permanent zu ändernden URL´s angegeben.
  • exit() schließt den ganzen Anweisungsblock ab, da es sinnlos wäre im Anschluss weiteren Code auszuführen.

Beispiel 2:

<?php
$param = $_SERVER["QUERY_STRING"];
if ($param != "") {
    $param = "?".$ref;
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: http://www.neu.de/".$param);
    exit();
    }
?>

Dieses Beispiel leitet eine Anfrage mit einem Query-String (zum Beispiel http://www.alt.de/?param=test) auf eine andere Domain um. Analog zum ersten Beispiel wird dem anfragenden Client zunächst mitgeteilt, daß der alte URL von einem Neuen ersetzt wurde. Darauf folgt mit der Übergabe des neuen URL die eigentliche Weiterleitung - hier allerdings mit dem in der Variablen $param gespeicherten Querystring ?param=test.

Vorrausgesetzt auf der neuen URL arbeitet ein Script, das den Querystring verarbeiten kann, zum Beispiel das originale Script vom alten URL, wird der Spider einer Suchmaschine die unter dem neuen URL gefundenen Inhalte erfassen und diese URL-Änderung im Index der Suchmaschine relativ schnell aktualisiert sein.

Würde in diesem Beispiel nur die Domain angefragt und kein Querystring übergeben werden, der URL also http://www.alt.de lauten, wird der Redirect nicht ausgeführt und der unter der Index-Seite hinterlegte Inhalt ausgegeben werden.

Perl Redirect / Perl Weiterleitung

Auch Perl kann Redirects durchführen und bietet hier sehr umfangreiche Möglichkeiten, auf die wir hier im Detail kaum eingehen können. Hier aber einige Beispiele zum Verständnis …

Beispiel 1:

#!/usr/bin/perl
$location = "http://www.server.de/";
print "Status: 302 Found\n";
print "Location: $location\n";
print "URI: <$location>\n";
print "Content-type: text/html\r\n\r\n";

Mit obigem Script können Sie einen einfachen, temporären Perl-Redirect (Statuscode 302) realisieren.

Beispiel 2:

#!/usr/bin/perl
use strict;
use warnings;
my $time = (localtime)[2];
my $URL = ($time > 17 and $time < 22) ? "http://seite1.de" : "http://seite2.de";
print "Status: 302 Moved\nLocation: $URL\n\n";

Hier wird ein temporärer Redirect mit Statuscode 302 so angewendet, daß in Abhängigkeit von der Uhrzeit jeweils auf einen anderen URL weitergeleitet wird. Interessant für Media-Streams, die zu bestimmten Tageszeiten laufen sollen.

Beispiel 3:

#!/usr/bin/perl
$location = "http://www.server.de/";
print "Status: 301 Moved Permanently\n";
print "Location: $location\n";
print "URI: <$location>\n";
print "Content-type: text/html\r\n\r\n";

Wie beim ersten Beispiel - nur als ein permanenter Perl Redirect mit Statuscode 301.

Anmerkung: Die in Spitzklammern mit URI notierte Anweisung der location ist derzeit vom W3C-Konsortium noch nicht gänzlich verabschiedet und nicht Bestandteil des RFC 2616. Diese den Protokollwelten des Mail-Standards abgeleitete Notation wird wohl aber näherer Zukunft in einem neuen RFC eingeführt werden. Wenn Sie beide Notationen benutzen, laufen Ihre Scripte auch zukünftig.

ASP Redirect / ASP Weiterleitung

Wie so vieles bei ASP lassen sich einfache Redirects mit ASP auch einfach umsetzen.

Beispiel 1:

<%
Response.Redirect("http://www.server.de")
%>

Ein sehr einfaches Beispiel für einen temporären ASP-Redirect mit Statuscode 302. Mit Response.Redirect senden Sie den Statuscode an den Client, und informieren ihn somit darüber, daß die angeforderte Seite nun unter der angegebenen Adresse erreichbar ist.

Beispiel 2:

<%
Response.Status = "301 Moved Permanently"
Response.Redirect("http://www.server.de")
%>

Beabsichtigt man nun eine permanente Umleitung (Statuscode 301) benötigt man zusätzlich Response.Status für die Angabe des Statuscodes.

ASP.NET Redirect / ASP.NET Weiterleitung

Das Ganze geht natürlich auch mit ASP.NET.

Beispiel

<script runat="server">
private void Page_Load(object sender, System.EventArgs e)
    {
    Response.Status = "301 Moved Permanently";
    Response.AddHeader("Location","http://www.server.de");
    }
</script>

Wie hier im Beispiel mit einem permanenten ASP.NET Redirect mit Statuscode 301 zu sehen ist, müssen Weiterleitungen lediglich an einen Event-Handle gebunden werden.

Coldfusion Redirect / Coldfusion Weiterleitung

Weiterleitungen lassen sich natürlich auch mit Coldfusion realisieren. Sie sind beinahe genau so einfach wie bei ASP-Redirects.

Beispiel 1:

<cflocation url="/new_location.cfm">

Das obige Beispiel zeigt, wie einfach eine temporäre Weiterleitung (Statuscode 302) in Coldfusion umgesetzt wird.

Beispiel 2:

<cfheader statuscode="301" statustext="Moved Permanently">
<cfheader name="Location" value="http://server.de">
<cfabort>

Und so funktioniert die permanente Weiterleitung (Statuscode 301) in Coldfusion .

Erläuterung:

  • Der Tag <cfheader> erzeugt benutzerdefinierte HTTP-Antwortheader, die an den Client zurückgegeben werden.
  • Zwingend erforderlich ist der Name oder der Statuscode der zurückgegeben werden soll.
  • <cfabort> schließt den ganzen Anweisungsblock ab, da es sinnlos wäre im Anschluss weiteren Code auszuführen.
  • Der Statustext kann optional vergeben werden.

Serverside Redirects auf Apache Webserver

Nachdem wir hier die Redirects eigentlich aller gängigen Sprachen abgehandelt haben, kommen wir im vierten Teil zu den Möglichkeiten auf Apache Webservern einen » Redirect mit .htaccess und mod_rewrite zu realisieren.

5. Februar 2008 - 15:58 | Webprogrammierung » Redirect & Suchmaschinen | | Codecasters
websmith® – Webdesign, Webhosting & Internetmarketing aus Rosenheim – © 2015 Codecasters GmbH