Voraussetzungen
Neben Grundkenntnissen in HTML, CSS und PHP sollte auch ansatzweise die Funktion der .htaccess bekannt sein und wie man dort ein eigenes Fehler-Dokument definiert.
Grundlagen dazu gibt es z. B. unter http://de.selfhtml.org/servercgi/server/htaccess.htm
Anmerkung
Dieses Tutorial nutzt die Möglichkeiten von PHP, um ein gewisses Maß an Komfort für den Seitenbetreiber zu bieten. Wenn auf dem Webspace kein PHP zur Verfügung steht, können aber auf jeden Fall die prinzipiellen Überlegungen und Vorgehensweisen übernommen werden.
Vorbereitung
Es bietet sich an, als erstes die Fehlerseite an sich zu erstellen, also die Datei, welche aufgerufen wird, wenn der User eine Seite angefordert hat, die nicht existiert.
Das Grundgerüst ist für die PHP- und die HTML-Variante gleich:
[highlight=HTML]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/Strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
<head>
<title>Fehler 404 - Seite nicht gefunden</title>
</head>
<body>
<h1>Die Seite wurde nicht gefunden</h1>
<p>Die angeforderte Seite existiert leider nicht. Klicken Sie <a href="index.html">hier</a>, um zur Startseite zu gelangen</p>
</body>
[/highlight]
Das ist nur die vereinfachte Darstellung, natürlich kann man die Seite noch entsprechend erweitern und ausformulieren, wahrscheinlich wird auch noch eine externe CSS-Datei eingebunden, außerdem kann man noch mehr Optionen anbieten, wenn die Seite z. B. über eine eigene Suchfunktion verfügt, kann die mit verlinkt werden.
Aber was hier schon ganz klar zu erkennen ist: Die Fehlermeldung führt nicht wie so oft in eine Sackgasse, sondern dem User wird eine Möglichkeit geboten, wie er doch noch an die gewünschten Informationen kommen kann. Nicht jeder macht sich die Mühe, die URL manuell zu kürzen und sich durch die Verzeichnisstruktur zu hangeln, unerfahrene User kommen noch nicht einmal auf den Gedanken. Somit ist die Gefahr geringer, dass der User der Seite ohne weiteres den Rücken kehrt, wenn die Startseite nur einen Mausklick entfernt ist.
Wenn die 404-Seite erscheint, merken das nur der Server und der entsprechende User. Der Seiten-Betreiber hat erst mal keine Ahnung davon. Ist auch nicht schlimm, falls derjenige sich nur vertippt hat. Falls aber irgendwo ein falscher Link vermerkt ist oder sich an den Inhalten aufgrund einer Umstrukturierung was geändert hat und dementsprechend alte Links ins Leere führen, sollte der zuständige Mensch doch davon Kenntnis erlangen. Dank PHP ist das sehr einfach, die mail()-Funktion ist in dem Fall unser Freund.
Hinweis: In diesem Beispiel wird nur auf die mail()-Funktion eingegangen, da dies eine Standard-Funktion von PHP ist. Wer möchte, kann natürlich auch z. B. phpmailer verwenden.
Hier die komplette Seite mit dem entsprechenden PHP-Code:
PHP-Code:
<?php
$an = "administrator@name_der_seite.de";
$betreff = "[" . $_SERVER['SERVER_NAME'] . "] Fehler 404";
$text = "Folgende Seite konnte nicht gefunden werden:\n";
$text .= "http://" . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']."\n\n";
if(isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] != "") {
$text .= "\n\nDie Seite wurde von dieser Adresse angefordert:\n";
$text .= $_SERVER['HTTP_REFERER'];
}
$header = "From: Automatische Meldung <noreply@" . $_SERVER['SERVER_NAME'].">\n";
$header .= "Content-Type: text/plain";
@mail($an, $betreff, $text, $header);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/Strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
<head>
<title>Fehler 404 - Seite nicht gefunden</title>
</head>
<body>
<h1>Die Seite wurde nicht gefunden</h1>
<p>Die angeforderte Seite existiert leider nicht. Klicken Sie <a href="index.html">hier</a>, um zur Startseite zu gelangen</p>
</body> Im Text der Mail wird zuerst die angeforderte (nicht existente) URL zusammengebaut, anschließend wird überprüft, ob ein Referer mit übermittelt wurde. Auch wenn man sich nicht 100%ig auf den Referer verlassen kann (siehe z. B. http://faq-php.de/q/q-http-referer.html), stellt er doch eine gute Informationsquelle dar, wenn es darum geht, festzustellen, von wo der User auf die Seite gelangt ist.
Das '@' vor dem mail()-Befehl sorgt dafür, dass eventuelle Fehlermeldungen unterdrückt werden und somit nicht auf der Fehler-Seite noch ein Fehler erscheint.
Die Vorteile dieser Vorgehensweise dürften auf der Hand liegen:
- Man kann feststellen, ob es seiteninterne Links gibt, die ins Leere führen. Selbst bei sorgfältiger Überprüfung und ausführlichen Tests kann das immer wieder mal vorkommen.
- Evtl. hat man sich für einige Seiten einen Namen ausgedacht, der unweigerlich Tippfehler provoziert. Wenn des Öfteren entsprechende Meldungen eingehen, sollte man dies ändern.
- Bei externen Links kann man den Seitenbetreiber informieren, damit er eine Aktualisierung vornehmen kann.
Anpassung der .htaccess
Abschließend muss natürlich noch die .htaccess-Datei angepasst (falls schon vorhanden) bzw. neu erstellt werden. Dazu reicht ein einfacher Text-Editor. Hier nur die relevante Zeile:
Code:
ErrorDocument 404 /404.php
Weitere Möglichkeiten zur Verwendung der .htaccess zeigt der oben genannte Link auf.
Hinweis für Windows-Nutzer: Da Windows Probleme damit hat, die Datei unter ihrem richtigen Namen zu speichern (Windows geht davon aus, dass es sich um eine Dateiendung handelt und der "richtige" Name fehlt) muss man hier erst die Datei ohne Punkt am Anfang speichern, hochladen und dann auf dem Server die Namenkorrektur vornehmen. Das FTP-Programm sollte hier hilfreich zur Seite stehen.
Zur Überprüfung einfach im Browser eine nicht vorhandene Seite anfordern; wenn alles in Ordnung ist, erscheint die eigene Fehlermeldung und kurz darauf ist auch eine entsprechende Mail im Postfach.
Fazit:
Man sollte das Potential einer eigenen Fehler-Seite nicht unterschätzen. Man hat dadurch die Möglichkeit, sich positiv von anderen Seiten zu unterscheiden und kann durch die automatische Benachrichtigung regulierend eingreifen.
[Ergänzungen]
09.05.2006: Es wurde die Überprüfung, ob überhaupt ein Referer übergeben wird, eingebaut
PHP-Code:
if(isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] != "") {
PHP-Code:
error_reporting(E_ALL);

Bereiche
Kategorien (Alle Bereiche)
Neue Beiträge