Fehlerseiten mit Apache und PHP

Dieser Artikel erläutert, wie Sie mit der Apache-Direktive ErrorDocument eigene Fehlerseiten bestimmen können. Es wird erklärt, warum Sie eigene Fehlerseiten anlegen und wie diese aussehen sollten. Schließlich wird noch gezeigt, wie Sie mit PHP Fehlerseiten dynamisch erstellen können.

Warum eigene Fehlerseiten?

Zu einer ergonomischen Webseite gehört es auch, Fehler nicht stiefmütterlich zu behandeln, sondern den Benutzer zu unterstützen, falls ein Fehler auftritt. Für Fehlerseiten ist es also wichtig,

  • dass sie sich nahtlos in Ihre Website einpassen, damit der Nutzer nicht das Gefühl hat, Ihre Webseite verlassen zu haben und auf einen schwerwiegenden Fehler gestoßen zu sein,
  • dass sie den Nutzer dabei unterstützen, die Ursache des Fehlers zu erkennen und ihm Hilfe anbieten, wie weiter verfahren werden kann,
  • dass die Fehlermeldung auffällig und klar, aber nicht abschreckend ist.

Jakob Nielsen schrieb dazu schon 2001 einen Artikel (Error Message Guidelines), indem er die folgenden Anforderungen an die Fehlerbehandlung stellt:

  • Bei einem Fehler muss es eine Fehlermeldung geben!
  • Die Fehlermeldung muss verständlich, höflich und präzise sein.
  • Bem Benutzer soll ein konstruktiver Vorschlag zur Fehlerbehandlung gemacht werden.

Wie funktioniert es technisch?

Dieser Artikel behandelt die Möglichkeiten des weit verbreiteten Apache Webservers. Für andere Webserver gibt es ähnliche Lösungen, auf die ich nicht weiter eingehen kann.

Fehlerseiten Apache 1.3

Abbildung 1: Fehlerseite des Apache 1.3 im Firefox

Das Protokoll HTTP sieht vor, dass ein Webserver u.a. mit einen Statuscode auf eine Anfrage eines Clients antwortet. Allgemein bekannt ist der Statuscode 404, der angibt, dass der Webserver die angefragte Ressource nicht finden konnte. Nun schickt der Webserver standardmäßig auch einen HTTP-Body (also eine Webseite) an den Client, der den Besucher kurz, aber entgegen allen oben beschriebenen Anforderungen, über den Fehler informiert (Abbildung 1).

Eine Erklärung aller HTTP-Statuscodes finden Sie in der RFC 2616 (HTTP/1.1 von 1999) in Abschnitt 10. Einige oft auftretende Fehler werden weiter unten besprochen.

Fehlerseite Internet Explorer

Abbildung 2: Fehlerseite des Internet Explorers

Meiner Meinung nach noch schlechter ist die Fehlerseite des Microsoft Internet Explorer, die angezeigt wird, wenn entweder kein oder nur ein kurzer HTTP-Body vom Webserver verschickt wird (Abbildung 2). Sie versucht zwar, Hilfestellungen zu geben und zeigt die Fehlermeldung in der Sprache des Betriebssystems an, doch hat man mit Ansicht dieser Fehlerseite den Webserver praktisch komplett verlassen. Negativ ist aber vor allem das Gebaren, dem Benutzer nicht die vom Webserver zugeschickte Fehlerseite anzuzeigen, sondern eine vom Browserhersteller geschriebene.

Die Direktive ErrorDocument

In der Konfigurationsdatei des Apache können eigene Fehlerseiten angegeben werden, die den Benutzer besser unterstützen. Webautoren, die keinen Zugriff auf die Konfigurationsdatei haben (was bei den meisten Providern der Fall ist), können dazu die sog. Zugriffskontrolldateien des Apache nutzen, die den Dateinamen .htaccess besitzen müssen und für das Verzeichnis und alle seine Unterverzeichnisse gelten, in denen sie gespeichert ist.

In der Dokumentation des Apache wird ein Beispiel ähnlich dem folgenden für die Nutzung der Direktive aufgeführt:

ErrorDocument 500 http://foo.example.com/cgi-bin/tester
ErrorDocument 404 default
ErrorDocument 401 /info_zur_anmeldung.html
ErrorDocument 403 "Der Zugriff ist nicht erlaubt."

Die erste Zeile ruft einen absoluten URL auf, wenn der Statuscode 500 gesendet wird, der zweite schickt bei einem 404 die Standard-Fehlerseite des Apache. Bei einem 401 wird ein URL der gerade aufgerufenen Domain geschickt, die letzte Zeile schickt einfach nur eine Zeichenkette.

Dabei kann ich von allen außer der dritten Methode nur abraten, da sie entweder keine Verbesserung oder weitere Probleme mit sich bringen. Sehr praktikabel und hilfreich ist jedoch der Aufruf eines URL auf der gerade aufgerufenen Domain, wie hier beim Statuscode 401 geschehen.

Wenn Sie einfache HTML-Fehlerseiten nutzen möchten, weil Sie kein PHP (oder eine andere Skriptsprache) benutzen können oder möchten, dann sollten in Ihrer .htaccess-Datei etwa folgende Einträge vorhanden sein:

ErrorDocument 401 /fehlerseiten/401.html
ErrorDocument 403 /fehlerseiten/403.html
ErrorDocument 404 /fehlerseiten/404.html
ErrorDocument 500 /fehlerseiten/500.html

Dies bewirkt, dass bei einem Aufruf von http://www.example.com/dieser/url/ist/nicht/vorhanden/gibts.nicht der Apache dem Client die Seite http://www.example.com/fehlerseiten/404.html schickt. Entgegen vielen anderen Apache-Direktiven ist hier also kein absoluter Server-Pfad anzugeben, sondern ein Pfad ausgehend von der Wurzel der aufgerufenen Domain!


Seiten: 1 2 Nächste