Abfangjäger für Fehlermeldungen

Dass Seiten nicht gefunden werden ist nicht ungewöhnlich und lässt sich auch kaum verhindern. Mögliche Fehlerursachen sind Tippfehler oder Verlinkungen über Suchmaschinen auf Seiten die inzwischen gelöscht wurden.
Am schlimmsten finde ich immer Fehlermeldungen, die mir das Gefühl geben ich bin auf der Seite unerwünscht und sollte mich am besten gleich wieder verziehen. Dazu gehören für mich alle Fehlermeldungen die mich aus der besuchten Seite rausfeuern und mir auf einer weißen Seite ein Objekt nicht gefunden!, ein Not Found oder einen Error 404 entgegenblöken. Solche Seiten bilden eine Sackgasse, weil weder eine Navigation noch sonst irgend etwas Hilfreiches von der besuchten Website übrig geblieben ist - entsprechend schnell klicke ich solche Seiten auch wieder weg...
Eigene Fehlerseiten sind wesentlich freundlicher zu Ihren Besuchern und bieten ganz nebenbei die Möglichkeit Fehlerquellen überhaupt erst festzustellen, eine Menge über die Besucher Ihrer Website zu erfahren und die Fehler konsequent abzufangen.
Im ersten Schritt legen Sie über das Website Baker Backend eine neue Seite mit dem Titel Fehler 404 vom Typ WYSIWYG und der Sichtbarkeit Versteckt an, damit die Fehlerseite nicht in der Navigation erscheint aber jederzeit aufgerufen werden kann.
Für die Gestaltung von Fehlerseiten gibt es keine festen Regeln, es besteht jedoch keinerlei Grund sie besonders steril und nüchtern zu gestalten. Bieten Sie dem Besucher eine Möglichkeit an, den gesuchten Inhalt doch noch zu finden und ggf. Kontakt mit Ihnen aufzunehmen.
Bei einer nicht so umfangreichen Website, wie z.B. der phpManufaktur, ist eine Sitemap mit einer kurzen Beschreibung der jeweiligen Seiteninhalte eine ganz gute Lösung. Bei umfangreicheren Websites ist ein Dialogfeld für das Durchsuchen der Website eine gute Idee.
Für die automatische Generierung einer Sitemap ist das Addon ShowMenu2 für Website Baker sehr gut geeignet. Im folgenden Beispiel wird davon ausgegangen, daß sie ShowMenu2 installiert haben.
Um die Dialogbox für das Durchsuchen der Website bzw. eine Sitemap anzuzeigen fügen Sie der Fehlerseite einen neuen Abschnitt vom Typ Code hinzu. Fügen Sie dort den folgenden Code ein:
// Bezeichnung der Website
$server_name = 'phpmanufaktur.de';
// Template fuer das Suchen Formular
define('search_form', '<div class="search_dlg">
<form name="search" action="%s" method="get">
<input type="text" name="string" />
<input type="submit" name="submit" value="%s durchsuchen ..." />
</form>
</div>');
if (SHOW_SEARCH) {
// Wenn die SUCHEN Funktion der Website aktiviert ist wird ein SUCHEN Dialog angezeigt
echo sprintf(search_form, WB_URL.'/search/index'.PAGE_EXTENSION, $server_name);
}
else {
// ... andernfalls wird mit ShowMenu2 eine SITEMAP angezeigt
echo '<div class="sitemap">';
show_menu2(SM2_ALLMENU, SM2_ROOT, SM2_ALL, SM2_ALL|SM2_ALLINFO,
'[li][a][page_title]</a><div class="sitemap_desc">[description]</div>',
false, '<ul class="sitemap [class]">');
echo '</div>';
}
Der Code sorgt dafür, daß auf der Fehlerseite die Dialogbox für das Durchsuchen angezeigt wird, sofern über die Website Baker Suchoptionen die Sichtbarkeit auf Öffentlich gesetzt ist, andernfalls wird mit Hilfe von ShowMenu2 eine Sitemap generiert und angezeigt.
Ersetzen Sie $server_name='phpmanufaktur.de' durch die Bezeichnung für Ihre eigene Website.
Für die Formatierung des Durchsuchen Dialog und der Sitemap fügen Sie die Klassen .search_dlg und .sitemap der screen.css des von Ihnen verwendeten Template zu. Für die Sitemap auf phpManufaktur sieht der Eintrag in der screen.css wie folgt aus:
.sitemap {
clear: both;
margin: 20px 10px 10px 30px;
padding: 0;
border: 0;
}
.sitemap ul,
.sitemap li {
list-style : none;
padding: 0;
font-size: 8pt;
margin: 3px 0 3px 6px;
border: 0;
}
.sitemap_desc {
padding: 3px 0 5px 40px;
font-style: italic;
}
Testen Sie die Fehlerseite und passen sie an Ihre Vorstellungen an, bis Sie mit dem Ergebnis zufrieden sind.
Im nächsten Schritt geht es darum dafür zu sorgen, daß anstatt der Standard Fehlermeldung die eigene Fehlerseite angezeigt wird, sofern auf dem Server eine Seite nicht gefunden wird. Dies geschieht mit Hilfe einer .htaccess Datei im Wurzelverzeichnis der Website.
![]()
Die .htaccess Datei ist eine Konfigurationsdatei in der verzeichnisspezifische Einstellungen auf dem Server vorgenommen werden können. Beispielsweise für die Einrichtung eines Verzeichnisschutzes, von Weiterleitungen oder auch für die Einstellung von Fehlerseiten. Die .htaccess Datei gilt für das jeweilige Verzeichnis und alle untergeordneten Verzeichnisse.
Sofern im Wurzelverzeichnis Ihrer Website noch keine .htaccess Datei existiert, legen Sie mit einem Texteditor eine neue Datei an. Die .htaccess sollte über folgenden Eintrag verfügen:
# Fehlerseiten
ErrorDocument 404 /pages/fehler-404.php
Mit # werden Kommentare gekennzeichnet. Die Fehlerseite wird mit ErrorDocument 404 /pages/fehler-404.php eingetragen, der Eintrag weist den Server an, bei einem Fehler mit dem Code 404 (Seite nicht gefunden) die Datei /pages/fehler-404.php auszuführen. Die relative Verzeichnisangabe bezieht sich auf die Position der .htaccess Datei.
Nachdem Sie die .htaccess Datei auf den Server übertragen haben, überprüfen Sie ob die Fehlerseite auch angezeigt wird indem Sie eine nicht existierende Seite auf Ihrem Server aufrufen, z.B. http://www.meinedomain.de/diese_seite_existiert_nicht.php.
Nun könnten Sie sich damit zufrieden geben, daß die Besucher Ihrer Website bei einem Fehler eine freundliche Fehlerseite angezeigt bekommen, aber eine eigene Fehlerseite kann noch sehr viel mehr leisten.
Im folgenden Abschnitt ergänzen wir das Fehlerformular um eine E-Mail Funktion, die Sie automatisch informiert wenn eine Seite nicht gefunden wurde und die Fehlerseite angezeigt wird.
Ersetzen Sie den Code im Fehlerformular durch den folgenden:
// E-Mail Adresse des Webservers
$from_email = 'server@phpmanufaktur.de';
// E-Mail Adresse des Webmasters
$to_email = 'webmaster@phpmanufaktur.de';
// Bezeichnung der Website
$server_name = 'phpmanufaktur.de';
// Textvorlagen fuer die E-Mail Benachrichtigung
define('msg_header', "From: %s\r\nX-Mailer: PHP/%s");
define('msg_subject', '[%s] - ERROR 404');
define('msg_intro',
"Auf dem Server %s [%s] erzeugte der Aufruf der Seite\r\n\n--> %s\r\n\neinen Fehler.\r\n\n
Ergaenzende Informationen:\r\n\n");
define('msg_referer', "HTTP Referer : %s\r\n\n");
define('msg_remote', "Remote IP : %s\r\nRemote Host : %s\r\n\n");
define('msg_browser', "Browser : %s\r\nBetriebssystem : %s\r\nVersion : %s\r\n\n");
define('msg_agent', "HTTP User Agent : %s\r\n\n");
// Fehlermeldung, wenn die E-Mail nicht versendet werden kann
define('mail_error', "<p><strong>Erweiterter Fehler</strong>: Die automatische
Benachrichtigung des Webmaster ist fehlgeschlagen.</p>");
// Template fuer das Suchen Formular
define('search_form', '<div class="search_dlg">
<form name="search" action="%s" method="get">
<input type="text" name="string" />
<input type="submit" name="submit" value="%s durchsuchen ..." />
</form>
</div>');
// Kopf der E-Mail
$header = sprintf(msg_header, $from_email, phpversion());
// Betreff Zeile
$subject = sprintf(msg_subject, $server_name);
// Erster Teil der Benachrichtigung
$message = sprintf(msg_intro, $server_name, $_SERVER['SERVER_ADDR'], $_SERVER['REQUEST_URI']);
if (isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER'])) {
// Benachrichtigung mit dem Referer ergaenzen
$message .= sprintf(msg_referer, $_SERVER['HTTP_REFERER']);
}
// Remote Adresse hinzufuegen
$message .= sprintf(msg_remote, $_SERVER['REMOTE_ADDR'], gethostbyaddr($_SERVER['REMOTE_ADDR']));
if (ini_get('browscap')) {
// Wenn eine browscap.ini existiert Informationen ueber den Browser auslesen
$browser = get_browser();
$message .= sprintf(msg_browser, $browser->browser, $browser->platform, $browser->version);
}
else {
// ansonsten wird der Standardwert verwendet
$message .= sprintf(msg_agent, $_SERVER['HTTP_USER_AGENT']);
}
if (!mail($to_email, $subject, $message, $header)) {
// Wenn E-Mail nicht versendet werden konnte Meldung in der Fehlerseite ausgeben
echo mail_error;
}
if (SHOW_SEARCH) {
// Wenn die SUCHEN Funktion der Website aktiviert ist wird ein SUCHEN Dialog angezeigt
echo sprintf(search_form, WB_URL.'/search/index'.PAGE_EXTENSION, $server_name);
}
else {
// ... andernfalls wird mit ShowMenu2 eine SITEMAP angezeigt
echo '<div class="sitemap">';
show_menu2(SM2_ALLMENU, SM2_ROOT, SM2_ALL, SM2_ALL|SM2_ALLINFO,
'[li][a][page_title]</a><div class="sitemap_desc">[description]</div>',
false, '<ul class="sitemap [class]">');
echo '</div>';
}
Ersetzen Sie $from_email, $to_email und $server_name durch für Sie zutreffende Adressen bzw. Namen. Speichern Sie die Seite und rufen Sie eine nicht existierende Seite auf Ihrem Server auf und kontrollieren Sie Ihr Postfach. In der E-Mail, die Sie erhalten haben, finden Sie eine ganze Reihe Informationen:
Auf dem Server phpmanufaktur.de [87.xxx.xxx.xxx] erzeugte der Aufruf der Seite --> /templates/manufaktur/DE_active.gif einen Fehler. Ergaenzende Informationen: HTTP_REFERER : http://google.com/search?q=cache [...] Remote IP : 200.234.200.155 Remote Host : hm1278.locaweb.com Browser : IE Betriebssystem : WinXP Version : 7.0
Wenn es nicht funktioniert...
Wenn Ihre Fehlerseite nicht angezeigt wird, obwohl sie in der .htaccess eingetragen ist, überprüfen Sie bitte:
- die Groß- und Kleinschreibung
- den Dateinamen .htaccess
Funktioniert es immer noch nicht, könnte es sein, daß ihr Provider keine eigenen Fehlerseiten zuläßt. Prüfen Sie dies, in dem Sie in der .htaccess folgendes eintragen:
ErrorDocument 404 "<p>Fehler 404</p>"
Wird auch dies nicht angezeigt sollten Sie sich an Ihren Provider wenden.
Wenn der E-Mail Versand nicht funktioniert, dann versuchen Sie die Fehlermeldung über den WB-Mailer zu versenden. Ersetzen Sie den Befehl:
if (!mail($to_email, $subject, $message, $header))
durch:
if (!$wb->mail($from_email, $to_email, $subject, $message))
Sollte der E-Mail Versand auch dann nicht funktionieren, kontaktieren Sie mich bitte.
Sie erfahren zunächst einmal den Namen und die IP Adresse des Servers, auf dem der Fehler aufgetreten ist und welche Datei nicht gefunden wurde - in diesem Fall eine DE_active.gif die offensichtlich zu einem Template gehört (hat).
An ergänzenden Informationen teilt Ihnen der Server mit, daß der Besucher über Google gekommen ist, die IP 200.234.200.155 verwendet, die zur Domain hm1278.locaweb.com gehört und daß er einen Internet Explorer der Version 7.0 unter Windows XP benutzt.
Sie werden sehr rasch feststellen, daß sie mit Hilfe dieser Informationen sehr gut auf Fehler reagieren können weil Sie künftig sofort erfahren, wenn ein Link innerhalb Ihrer Website nicht stimmt und ins Leere führt oder Besucher veraltete Seiten aufrufen, die nicht mehr existieren. Sie werden auch eine Menge über Spider erfahren, die versuchen Ihre Website zu missbrauchen...
Wie reagiert man am Besten auf die Fehlermeldungen?
- Wenn Sie feststellen, daß Sie eine Fehlermeldung erhalten weil ein Link auf eine Grafik in ihrer Website nicht stimmt, dann korrigieren Sie den Link und stellen Sie den Fehler ab.
- Wenn Sie die Fehlermeldung erhalten weil Sie eine Seite umbenannt oder verschoben haben, fügen Sie Ihrer .htaccess Datei eine Redirect Anweisung hinzu, die den veralteten Link auf die aktuelle Seite umleitet (für weitere Informationen zur .htaccess besuchen Sie bitte SelfHTML)
- Wenn sich die Fehlermeldung auf einen Inhalt bezieht, den Sie nicht mehr zur Verfügung stellen können Sie die Besucher auch auf eine entsprechende Informationsseite weiterleiten oder auf einen ähnlichen Inhalt verlinken
- Ihr Ziel sollte es immer sein, Fehlermeldungen durch eine geschickte Reaktion auf entsprechende Anfragen zu verhindern und den Besucher nicht im Regen stehen zu lassen.
Bitte helfen Sie mit diesen Artikel zu verbessern,
Vielen Dank!
![]()
Ralf Hertsch, 29.08.2009
Kommentare
15.02.2011
Hallo wäre es nicht noch das Zuckerstück auf dem Sahnehäubchen auf der Torte die "Abfangjäger" heist...wenn man das mit ein wenig mapping von alten Links auf neue z.B. bei Umzug oder ähnlichen kombinieren könnte?
Hier aus dem Cookbook:
http://onlamp.com/pub/a/onlamp/2003/02/13/davidsklar.html
Grüße Martin
12.01.2011
Puh! - jetzt konnte ich mich _auch_ endlich mal durchringen, ordentliche 404er zu machen. Danke für das tollte Tutorial! Eine Kleinigkeit ist mir aufgefallen: Wenn PAGE_EXTENSION auf "html" steht, wird in der Suche /search/index.html aufgerufen. Die heißt aber immer noch index.php
Die eMail-Benachrichtigung macht ganz schön Stress ;-) Irgend einen Listenpunkt hat man immer vergessen...
29.06.2009
Microott
Tolle Idee
Servus, ich schaue immer wieder gerne auf Deiner Seite vorbei, da die Infos immer sauber aufbereitet sind. Das werde ich sobald wie mgl. umsetzten. Grüsse aus München Dirk
26.02.2009
jrast
Kann ich sehen ob da ein Fehler 404 ankommt
Hallo Ralf Gibt es eine möglichkeit im Browser zu sehen dass da jetzt ein Fehler 404 ausgelöst wurde? klar, die seite bekomme ich angezeigt, aber wurde im header auch ein 404 abgesetzt, denn dass wäre ja wichtig für suchmaschienen. gruss rastj
16.01.2009
alexander1951
Tolle Seite!
Hallo Ralf, bin sehr beeindruckt und begeistert von diesem Tutorial. Sind viele nützliche Tips&Trix drin, die mich beim Reifeprozess meiner WB-Seiten vorangebracht haben. Herzlichen Dank dafür! Eine Bitte habe ich noch: Hast Du einen Tip, wie man showmenu2 dazu bringt, im Rahmen der o.a. Sitemap auch versteckte Seiten anzuzeigen? Nochmals: Super-Seite.
13.10.2008
dbs
prima...
Hallo, eine prima Anleitung und dieses umzusetzen ist mehr als empfehlenswert (sofern die selbst erstellte Fehlerseite nicht noch schlimmer aussieht als die üblichen *g*) Für Anfänger wie mich müsste mehrfach deutlich darauf hingewiesen werden, dass die .htaccess auch zu jeder Zeit so heißen muss und nicht plötzlich durch das Editieren des Inhaltes zu einer htaccess.txt wird. *augenroll* *g* Gruß aus dem Rheinland Frank
13.10.2008
erpe
Super
Hallo Ralf, ein tolles Tutorial in einer wirklich sinnvollen Angelegenheit. Danke dafür und: weiter so. Gruss erpe

