Teil von SELFHTML aktuell Teil von Artikel Teil von PHP

PHP:
Informationsseite für alte URLs anzeigen

nach unten Achim Schrepfer
nach unten Hinweise zum Thema
nach unten Beispiel mit Erläuterungen
nach unten Weiterführende Links

Achim Schrepfer

E-Mail: E-Mail selfeature@speedesign.de
Homepage-URL: deutschsprachige Seite http://www.speedesign.de/

Bei Fragen zu diesem Beitrag bitte den Autor des Beitrags kontaktieren!

nach obennach unten

Hinweise zum Thema

Jedes halbwegs gut besuchte Webangebot kennt das Problem: im Laufe der Zeit werden durch Umstrukturierungen respektive Erneuerungen bestimmte Dateien bzw. Verzeichnisse auf dem Webserver entfernt. Manchmal werden Seiten durch neue ersetzt, manchmal ersatzlos gestrichen. In jedem Fall aber würde der Versuch eines Benutzers, die Seite aufzurufen (z.B. aus Lesezeichen im Browser oder über einen Link auf einer anderen Webseite) mit einem bereichsübergreifende Seite HTTP-Status 404 (Objekt nicht gefunden) fehlschlagen.

Zwar gibt es die Möglichkeit, falls sich nur der URL des Dokuments ändert, an der ursprünglichen Stelle eine HTML-Seite mit einer Umleitung (mittels bereichsübergreifende Seite META-Angabe bzw. einem Hinweistext und einem entsprechenden Verweis) zu platzieren, jedoch kann dies bei größeren Projekten schnell für Verwirrung sorgen, da der Überblick über aktuelle Dokumente und Umleitungsseiten verloren geht.

In diesem Tipp wird eine Idee vorgestellt, nach der ein zentrales PHP-Skript alle Anfragen nach nicht vorhandenen Seiten (sog. 404-Fehler) verarbeitet und je nach angeforderter URL einen Hinweistext ausgibt. Dieses Vorgehen ist sehr elegant, da ältere URIs nach wie vor "erreichbar" sind und Hinweise auf den Verbleib des angeforderten Dokumentes an zentraler Stelle gepflegt werden können.

Hinweis:

Das im folgenden vorgestellte Skript benötigt eine 404-Fehlerumleitung. D.h. der Webserver muss so eingestellt sein, dass er als Fehlerseite für den HTTP-Fehler 404 (genau genommen ist es kein Fehler, sondern ein Status) auf dieses Skript verweist. Das zweite Listing zeigt eine .htaccess-Datei, für den Apache-Webserver, die diese Funktionalität bereit stellt.

nach obennach unten

Beispiel mit Erläuterungen

Beispiel 1 (PHP-Skript)

 1: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 2: <html>
 3: 
 4: <head>
 5:         <title>404-Fehler</title>
 6:         <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
 7: </head>
 8: 
 9: <body bgcolor="#FFFFFF" text="#000000">
10: 
11: <p><b style="color: red;">Fehler 404:</b> Das angeforderte Dokument wurde nicht gefunden.</p>
12: <p>Sie haben versucht, auf ein Dokument zuzugreifen, welches nicht oder nicht mehr existiert.</p>
13: <p>Nachfolgend erhalten Sie eine Beschreibung der Seite und einen Hinweis, ob es Ersatz gibt oder nicht:</p>
14: 
15: <?php
16: $REDIR_DESCRIPTIONS = array(
17: 	'/sfx/catan.shtml' => 'Startseite zu einem Special über das Spiel "Die Siedler von Catan". Diese Seite wurde mangels Interesse ersatzlos eingestellt.',
18: 	'/frameset.htm' => 'Das Frameset der allerersten speedesign.de-Homepage. Heute arbeitet speedesign.de komplett ohne Frames. Als Ersatz dient die <a href="/index.html">neue Startseite</a>.',
19: 	'/dfg/einfuehrung.shtml','Einführung in die Digitalfotografie. Das Dokument ist veraltet. Der neue Fotografie-Bereich wird in Kürze online gestellt.',
20: 	'/sfx/catan.html' => 'Unterseite zu einem Special über das Spiel "Die Siedler von Catan". Diese Seite wurde mangels Interesse ersatzlos eingestellt.',
21: 	'/images/autor.gif' => 'Dieses Bild gibt es nicht mehr. Es gibt keinen Ersatz dafür.',
22: 	'/kon/inhalt.htm' => 'Alte Kontaktseite. Eine neue Version finden Sie im <a href="/other/impressum.php">Impressum</a>.',
23: 	'/intro.htm' => 'Startseite des alten Webs. Wurde durch die <a href="/index.html">neue Startseite ersetzt</a>.',
24: 	'/cgi-bin/speedcms.pl?show=mun/mun.cms' => 'Fränkische Mundart. Das Projekt wurde leider eingestellt.'
25: );
26: 
27: //Welche Seite wurde aufgerufen?
28: $REDIRECT_URL = $_SERVER['REDIRECT_URL'];
29: 
30: //Ist die Seite bekannt?
31: if ($REDIR_DESCRIPTIONS[ $REDIRECT_URL ]) { 
32: 	$TEXT = $REDIR_DESCRIPTIONS[ $REDIRECT_URL ]; 
33: } else { 
34: 	$TEXT = 'Die angeforderte Seite ('.$REDIRECT_URL.') scheint es noch nie auf diesem Server gegeben zu haben. 
35: 	Prüfen Sie die Schreibweise oder gehen Sie zur <a href="/">Startseite</a>.';
36: }
37: 
38: //Ausgabe des Fehlertextes
39: echo "<p><b>$TEXT</b></p>";
40: 
41: ?>
42: 
43: </body>
44: </html>

Erläuterung:

Nach der Einleitung des PHP-Codeblocks in Zeile 15 folgt in Zeile 16 die Definition des deutschsprachige Seite assoziativen Arrays $REDIR_DESCRIPTIONS. Das Array enthält als Schlüssel den URL des (nicht mehr vorhandenen) Dokuments relativ zum Wurzelverzeichnis. Als Wert wird ein Beschreibungstext angegeben, welcher auch HTML-Code enthalten kann (Für Links etc.). Die Definitionen für die einzelnen Dokumente finden in den Zeilen 17 bis 24 statt und können beliebig fortgesetzt werden. In Zeile 28 wird über das englischsprachige Seite Superglobal $_SERVER (ab PHP Version 4.1) die Servervariable englischsprachige Seite REDIRECT_URL in der entsprechenden Variable abgelegt. In Zeile 31 wird geprüft, ob der Ausdruck $REDIR_DESCRIPTIONS[ $REDIRECT_URL ] wahr ist. Dies ist der Fall, wenn zuvor ein entsprechender Eintrag gemacht wurde. Bei einem Treffer wird in Zeile 32 der zuvor definierte Text in die Variable $TEXT geschrieben. Ansonsten wird die Variable in Zeile 34 mit einer Standardmeldung versehen. Schliesslich wird in Zeile 39 die Meldung ausgegeben und in Zeile 41 der PHP-Codeblock geschlossen.

Beachten Sie:

Der in Zeile 21 definierte Hinweis auf die Datei autor.gif macht nur bedingt Sinn, da er ja bei Bildern, die per <img>-Tag eingebunden sind, nicht sichtbar wird. Für diesen Fall könnte man das Skript erweitern, dass es im Falle von Bildern eine entsprechende Ersatz-Grafik als Datenstrom zurückliefert. Ein solcher Ausbau würde den Rahmen dieses Tipps jedoch sprengen.

Beispiel 2 (.htaccess-Datei)

ErrorDocument 404 /messages/404.php   

Erläuterung:

Mit der ErrorDocument-Direktive wird einer HTTP-Fehlernummer ein entsprechendes Dokument zugewiesen. In diesem Fall soll der Webserver bei einem Fehler 404 das Dokument /messages/404.php ausliefern.

Beachten Sie:

Ihr Webserver muss derartige Eingriffe in die Konfiguration erlauben. Am besten ist, es einfach auszuprobieren. Das gezeigte Beispiel wurde dem weit verbreiteten Apache-Webserver getestet. Bei anderen Webservern ist möglicherweise eine andere Konfiguration für Fehlerdokumente notwendig.

nach obennach unten

Weiterführende Links

Die folgenden Stellen werden empfohlen, um das obige Beispiel besser zu verstehen, oder um weitere Möglichkeiten und Details zu erfahren.

bereichsübergreifende Seite Freischaltung von .htaccess-Funktionen
englischsprachige Seite ErrorDocument directive
englischsprachige Seite W3C: Cool URIs don't change

Teil von SELFHTML aktuell Teil von Artikel Teil von PHP

© 2007 bereichsübergreifende Seite Impressum