Umleiten von Seitenbesuchern – PHP Redirect

Mit einem Redirect wird ein Client-Programm – im Allgemeinen ist hiermit die Browseranwendung des Seitenbesuchers gemeint, aber auch automatisierte Clients z.B. Bots von Suchmaschinenbetreibern verfolgen Redirects – darauf hingewiesen, dass sich eine angeforderte Seite oder ein angefordertes Dokument unter einer anderen URL befindet. Eine Redirection wird häufig beim Umzug eines Internetauftritts dazu verwendet Besucher, die bislang – beispielsweise in ihrer Bookmarksammlung – die alte Adresse gespeichert haben, auf die neue Adresse zu verweisen. Auf diese Weise kann der Seitenbetreiber verhindern, dass die über Bookmarks wiederkehrenden Besucher den Eindruck gewinnen, die dort vermuteten Informationen seien nun nicht mehr abrufbar. Auch verlieren ältere, auf die alte Adresse gesetzte, Links von anderen Seiten nicht ihre Gültigkeit. Klickt der Benutzer auf den veralteten Link, so wird er automatisch an die neue Zieladresse verwiesen.

Es gibt viele Möglichkeiten einen Client dazu zu bewegen einem Redirect zu folgen. Im Prinzip gibt es zwei herangehensweisen zur Realisierung von Redirects. Zum Einen können Redirects von Seiten des Webservers initiiert werden und zum Anderen gibt es clientseitig eingeleitete Redirects. Bei einem clientseitigen Redirect wird meist ein HTML-Dokument an den Browser des Seitenbesuchers geschickt, welches dem Webbrowser die Anweisung gibt eine neue Zieladresse (Redirect URL) zu laden. Dies kann entweder umgehend oder aber nach einer gewissen Verzögerung (timeout) erfolgen – etwa mit Anzeige einer entsprechenden Meldung im Browserfenster, die den Besucher auf die Umleitung aufmerksam macht.

Ein clientseitiger Redirect kann mit Hilfe einer entsprechenden Angabe in den Meta-Tags des HTML-Dokuments umgesetzt werden. Hierzu muss der Browser kein besonderes Script ausführen, da die meisten Webbrowser diese Möglichkeit zur Umleitung (Redirect durch Reload bzw. Refresh eines anderen Dokuments) beherrschen. Auch unter Verwendung von JavaScript ist die Realisierung von Redirects möglich. Unter Redirect mit JavaScript wird diese Möglichkeit beschrieben. Der Redirect mit HTML-Meta-Tags (Refresh) – siehe hierzu auch das dritte Beispiel weiter unten – oder der scriptgesteuerte Redirect (beispielsweise mit JavaScript) sind allerdings die einzigen Wege zur Realisierung von zeitverzögerten Redirects, bei denen der Besucher mit einer kurzen Meldung auf die Umleitung hingewiesen werden kann.

Im Unterschied zu clientseitigen Redirects ist ein serverseitiger Redirect nicht auf Scripting-Fähigkeiten eines Browsers angewiesen. Die performateste Möglichkeit zur Einrichtung eines serverseitigen Redirects ist sicher die mittels der .htaccess-Datei. Diese Konfigurationsdatei wird vom Webserver eingelesen. Findet der Webserver einen entsprechenden Eintrag in dieser Datei, so wird die Umleitung umgehend eingeleitet und der Request mit dem entsprechenden HTTP-Status-Code beantwortet. Der Webserver sendet dann einen entsprechenden Header an den Client (Browser), der diesen dazu bewegt, die neue Ziel-URL (Location) zu laden.

Wird der Redirect durch eine serverseitige Programmiersprache (wie beispielsweise PHP) umgesetzt, so passiert im Grunde genommen nichts anderes. Allerdings wird hier ein Umweg gegangen, bei dem zunächst ein serverseitiges Script ausgeführt wird, welches den entsprechenden Header erzeugt und an den Browser schickt (HTTP redirect). Dies führt zu einer geringfügen Verzögerung bei Beantwortung des Requests und der Webserver wird einer entsprechend höheren Belastung ausgesetzt – was aber im Normalfall unproblematisch ist.

PHP Redirect Beispiel 1: Redirect in PHP mit Header

Im folgende Beispiel-Code wird ein PHP Header Redirect umgesetzt. Mit der PHP-Funktion header können einzelne Bestandteile des HTTP-Headers an den Client verschickt werden. Zu beachten ist hier, dass die Header eines HTTP-Requests grundsätzlich vor den zu versendenen Daten (dem eigentlichen Dokument) verschickt werden müssen. Die Aufrufe der Header-Funktion müssen also allesamt vor der Ausgabe des Contents – etwa dem Inhalt des HTML-Code – aufgerufen worden sein. Zugleich sendet der Header den HTTP-Status-Code 302 (Moved Temporarily – Dokument ist vorübergehend unter der neuen Adresse erreichbar) an den Client. Im Beispiel wird der Aufruf einer URL, die den PHP-Code enthält, auf unsere Startseite umgeleitet. Die Weiterleitung erfolgt dabei ohne Verzögerung (timeout), so dass der Besucher den Redirect nur durch einen Blick in die Adresszeile des Browsers bemerkt.

<?php
    // Header senden, der die neue Zieladresse enthält
    // und den Browser dazu bewegt, die neue URL automatisch
    // zu laden
    header ("Location: http://www.evocomp.de");
?>

Der vorherige Script-Code realisiert lediglich einen temporären Redirect. Wenn der Redirect dauerhaft durch Clients, wie beispielsweise Bots, zur Kenntnis genommen werden soll und diese Clients künftig gleich die neue Adresse ansteuern sollen, dann ist ein dauerhafter Redirect sinnvoller. Hierzu muss der Client den HTTP-Status-Code 301 (Moved Permanently – Dokument dauerhaft unter neuer Adresse verfügbar) erhalten. Wichtig ist hier, dass der Status-Header nach dem Redirect-Header (location) folgt. Nur auf diese Weise wird der vom Location-Header automatisch gesetzte Status-Code 302 durch den HTTP-Status 301 ersetzt.

<?php
    // Redirect, wie zuvor
    header ("Location: http://www.evocomp.de");
    // Standardmäßig durch den Redirect gesetzten HTTP-Status 302
    // (Moved Temporarily) durch neuen Status 301 (Moved Permanently)
    // ersetzen.
    header ("HTTP/1.0 301 Moved Permanently");
?>

PHP Redirection Beispiel 2: PHP Redirect Page to URL

Das nächste Beispiel zeigt, wie ein allgemeiner PHP HTTP Redirect implementiert werden kann. Als Parameter wird dem Script in der aufrufenden URL, unter welcher das Script gespeichert ist – beispielswiese redirect.php – der Parameter URL per GET übergeben. Die somit angegebene Ziel-URL stellt das Zeil für den Redirect dar. Aufgerufen wird das Script beispielsweise mit der URL http://www.evocomp.de/redirect.php?URL=http://www.evocomp.de. Dieser Aufruf hat dann zur Folge, dass die Startseite von EvoComp.de über den Redirect geladen wird.

Im Script wird zuallererst mittels isset Function geprüft, ob der Parameter URL auch in der URL übergeben wurde. Die per GET-Request übergebenen Script-Parameter sind unter PHP in der Variable $_GET abgelegt. Der zweite Teil der If-Anweisung prüft per regulärem Ausdruck, ob der im Parameter URL gespeicherte Wert auch eine URL ist – in diesem Fall wird durch den Aufruf der Funktion preg_match allerdings nur geprüft, ob der Parameter mit http:// beginnt und von weiteren Zeichen gefolgt wird; dies ist keine vollständige Gültigkeitsprüfung einer URL.

Sind diese Rahmenbedingungen erfüllt, so erfolgt in der darauf folgenden Zeile der Redirect auf die angegebene URL, indem der entsprechende Header mit der neuen Location ausgegeben wird. Schlägt die Abfrage der Bedingungen aus der If-Anweisung fehl, so wird mittels echo eine ensprechende Fehlermeldung ausgegeben und es erfolgt keine Umleitung des Besuchers.

<?php
    // Ziel-URL für den Redirect muss in den Parametern angegeben worden
    // sein. Darüber hinaus muss die URL zumindest mit einem http:// beginnen.
    if (isset ($_GET['URL']) && preg_match ('/^http:\/\/.+/i', $_GET['URL']))
        // Ist dies alles gegeben, so kann der Redirect Header gesendet
        // werden.
        header ("Location: " . $_GET['URL']);
    else
        // Ansonsten soll eine Fehlermeldung ausgegeben werden.
        echo "Umleitung fehlgeschlagen!";
?>

PHP Redirect Beispiel 3: Zeitverzögerter Redirect (Refresh mit Timeout)

Der selbe Effekt, wie mit dem HTML-Meta-Tag Refresh, der im HEAD-Teil der HTML-Datei notiert werden kann, wird erreicht, indem der Refresh über den HTTP-Header initiiert wird. Im Beispiel unten wird eine Fehlerseite generiert, die über ihren Status angibt, dass das angeforderte Dokument nicht gefunden wurde, worauf ein Refresh-Header nach einem Timeout (Wartezeit) von 5 Sekunden dafür sorgt, dass der Besucher auf eine neue Zielseite – hier die Startseite der selben Domain – umgeleitet wird. Darunter folgt der HTML-Code der Fehlerseite, die während der Wartezeit angezeigt wird und den Besucher auf den Fehler aufmerksam macht. Beachten Sie aber, dass derartige Redirects / Reloads nicht unbedingt von allen Clients unterstützt werden. Zur Integration von PHP-Code in HTML finden Sie weitere Informationen unter PHP Script in HTML.

<?php
    // HTTP-Status für Dokument nicht gefunden an den Client senden
    header ("HTTP/1.0 404 Not Found");
    // Refresh-Header mit Timeout und neuer URL an den Client senden
    header ("Refresh: 5; url=/");
    // Nun folgt der HTML-Code zur Anzeige der temporären Fehlerseite,
    // die den Besucher auf das fehlende Dokument aufmerksam macht.
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>Das von Ihnen angeforderte Dokument wurde nicht gefunden!</title>
    </head>
    <body>
        <h1>Das von Ihnen angeforderte Dokument wurde nicht gefunden!</h1>
        <p>
            Sie werden nun nach 5 Sekunden automatisch auf unsere Startseite verwiesen!
            Sollte dies nicht funktionieren, so klicken Sie <a href="/" title="">hier</a>.
        </p>
    </body>
</html>

¬ Tutorials



¬ Insolvenzrecht