permalink

1

Eigene Fehlerseiten gestalten

Die HTTP/1.1-Spezifikation defi­niert eine ganze Reihe von Feh­ler­codes, dar­un­ter die Feh­ler 401 (Unaut­ho­ri­zed), 403 (For­bid­den) 404 (Not Found) und 410 (Gone). Die im Falle eines Feh­lers ange­zeig­ten Stan­dard­feh­ler­sei­ten rei­chen nicht aus, um Nut­zer mit den not­wen­di­gen Infor­ma­tio­nen zur Feh­ler­be­hand­lung und wei­te­ren Vor­ge­hens­weise zu ver­sor­gen. Die­ser Arti­kel zeigt, wie Sie Ihre Besu­cher auf selbst gestal­tete Feh­ler­sei­ten lei­ten und wel­che Infor­ma­tio­nen diese ent­hal­ten sollten.

Ein­lei­tung

Die erste Zeile (Sta­tus­zeile) des HTTP-Response eines Web­ser­vers ent­spricht stets fol­gen­dem Schema:

HTTP/<Version> <Statuscode> <Statustext>

Bei einer kor­rekt aus­ge­lie­fer­ten Res­source sieht die Sta­tus­zeile in den meis­ten Fäl­len wie folgt aus:

HTTP/1.1 200 OK

Die HTTP/1.1-Spezifikation defi­niert in Abschnitt 10 alle in Frage kom­men­den Sta­tus­codes, dar­un­ter auch eine Hand­voll Feh­ler­codes. Ich stelle im Ver­lauf die­ses Arti­kels vor allem die in der fol­gen­den Tabelle auf­ge­führ­ten Feh­ler­codes näher vor und zeige, wie Sie Ihre Besu­cher auf selbst gestal­tete Feh­ler­sei­ten lei­ten und wel­che Infor­ma­tio­nen diese ent­hal­ten sollen.

Feh­ler­codes, die Sie ent­spre­chend behan­deln soll­ten
Feh­ler­code Sta­tus­text Beschrei­bung
401 Unaut­ho­ri­zed Der Benut­zer benö­tigt eine Auto­ri­sie­rung, ohne die er kei­nen Zugriff auf die Res­source hat.
403 For­bid­den Nicht öffent­li­cher Bereich, auf den der Benut­zer kei­nen Zugriff hat.
404 Not Found Die Res­source wurde unter dem ange­ge­be­nen URI nicht gefunden.
410 Gone Unter dem ange­ge­be­nen URI ist keine Res­source mehr erreich­bar und es ist keine Wei­ter­lei­tungs­adresse bekannt.

Zum Sei­ten­an­fang

Stan­dard­feh­ler­sei­ten vermeiden

Jeder, der hin und wie­der mal im Web surft, kennt (lei­der) die Stan­dard­feh­ler­sei­ten, die Brow­ser anzei­gen, wenn ver­geb­lich ver­sucht wird, eine ver­meint­lich vor­han­dene Res­source auf­zu­ru­fen oder in einen pass­wort­ge­schütz­ten Bereich zu gelan­gen. Der­ar­tige Stan­dard­feh­ler­sei­ten soll­ten Sie Ihren Besu­chern nicht zumu­ten, denn diese rei­chen nicht aus, sie mit den not­wen­di­gen Infor­ma­tio­nen zur Feh­ler­be­hand­lung zu ver­sor­gen. Gerade uner­fah­rene Besu­cher bli­cken in vie­len Fäl­len rat­los auf die Feh­ler­seite und wis­sen nicht, was sie nun tun kön­nen, um an die gesuchte Infor­ma­tion zu gelan­gen. Dar­über hin­aus wirkt das mini­ma­lis­ti­sche Design abschre­ckend und gibt Besu­chern das Gefühl, Ihre Web­site ver­las­sen zu haben. Viel bes­ser ist es, eigene Feh­ler­sei­ten zu gestal­ten und diese an das Design der Web­site anzu­pas­sen; sie soll­ten über Kern­ele­mente wie Site Label und Navi­ga­tion ver­fü­gen sowie dem grund­sätz­li­chen Auf­bau der Web­site ent­spre­chen.

Jeder Web­ser­ver bie­tet die Mög­lich­keit, eigene Feh­ler­sei­ten anzu­le­gen. Beim Apa­che Web­ser­ver kön­nen Sie diese über die Direk­tive ErrorDocument sowohl glo­bal in der Kon­fi­gu­ra­ti­ons­da­tei httpd.conf fest­le­gen, sofern Sie auf diese zugrei­fen kön­nen, als auch in Zugriffs­kon­troll­da­teien (htaccess-Dateien). Letz­tere wir­ken sich nur auf das Ver­zeich­nis aus, in dem sie ange­legt wer­den, sowie auf des­sen Unterverzeichnisse.

Zum Sei­ten­an­fang

Die Direk­tive ErrorDocument

Die ErrorDocument-Direk­tive hat fol­gende Syntax:

ErrorDocument <Fehlercode> <Aktion>

Als Aktion kön­nen Sie einen exter­nen oder loka­len URI zur einer eige­nen Feh­ler­seite sowie Text ange­ben, der anstatt der Stan­dard­feh­ler­mel­dun­gen ange­zeigt wird. Die­ser Text kann auch Markup beinhal­ten. Bitte beach­ten Sie, dass die­ser Text im Apa­che 1.4 durch ein Anfüh­rungs­zei­chen (U+0022) ein­ge­lei­tet und im Apa­che 2.0 durch Anfüh­rungs­zei­chen umfasst wird.

ErrorDocument 401 http://www.example.com/error/401
ErrorDocument 403 /error/403.php
ErrorDocument 404 "<h1>Fehler 404</h1><p>Das Dokument
  konnte nicht gefunden werden.</p>"

Wenn Sie auf eine externe Res­source ver­wei­sen, soll­ten Sie beach­ten, dass der Apa­che Web­ser­ver eine Wei­ter­lei­tung zum Cli­ent sen­det, um die­sem mit­zu­tei­len, wo das Doku­ment zu fin­den ist, auch wenn das Doku­ment letzt­lich wie­der zum glei­chen Ser­ver führt. Das führt unter ande­rem dazu, dass der Cli­ent zumin­dest vom Apa­che 1.3 nicht den Original-Statuscode erhält, son­dern statt­des­sen einen Weiterleitungs-Statuscode. Dies wie­derum kann Such­ro­bo­ter und andere Cli­ents ver­wir­ren, die den Sta­tus­code dazu ver­wen­den, her­aus­zu­fin­den ob ein URI gül­tig ist. Wenn Sie eine Feh­ler­seite für den Feh­ler­code 401 anle­gen, wird der Cli­ent dar­über hin­aus nicht wis­sen, dass er den Benut­zer zur Ein­gabe eines Pass­worts auf­for­dern muss, da er den Sta­tus­code 401 nicht erhält. Sie müs­sen des­halb stets auf eine interne Res­source ver­wei­sen, wenn Sie eine Feh­ler­seite für 401-Fehler anle­gen wollen.

An die­ser Stelle zeigt sich mal wie­der ein Feh­ler im Inter­net Explo­rer in den Ver­sio­nen 5.x und 6.x. Wenn Sie auf eine Feh­ler­seite ver­wei­sen, die klei­ner als 512 Bytes groß ist, wird die Stan­dard­feh­ler­seite ange­zeigt. Ach­ten Sie also dar­auf, dass Ihre Feh­ler­sei­ten aus­rei­chend groß sind, sodass sie auch die­sen Brow­sern »auffallen«.

Richt­li­nien für Fehlermeldungen

Hilf­rei­che Feh­ler­mel­dun­gen sind auf­fäl­lig, ver­ständ­lich und höf­lich for­mu­liert, beschrei­ben das Pro­blem prä­zise und geben kon­struk­tive Hin­weise, wie der Feh­ler zu behe­ben ist.

Feh­ler­mel­dung auf­fäl­lig gestalten
Die Auf­gabe von Feh­ler­mel­dun­gen ist es, den Nut­zer dar­auf auf­merk­sam zu machen, dass etwas schief gelau­fen ist. Gestal­ten Sie Ihre Feh­ler­sei­ten so, dass sich die eigent­li­che Feh­ler­mel­dung deut­lich und auf­fäl­lig prä­sen­tiert und klar aus­drückt, dass ein Feh­ler auf­ge­tre­ten ist.
Feh­ler­mel­dun­gen ver­ständ­lich formulieren
Feh­ler­mel­dun­gen soll­ten auch dann ver­ständ­lich sein, wenn die tech­ni­schen Zusam­men­hänge nicht bekannt sind. Die meis­ten Benut­zer kön­nen mit einer allein ste­hen­den Mel­dung »Feh­ler 404« nichts anfan­gen. Bes­ser ergän­zen Sie sie durch eine ver­ständ­li­che Ergän­zung wie bei­spiels­weise »Seite nicht gefunden«.
Feh­ler­mel­dun­gen höf­lich formulieren
Wäh­len Sie bei Ihren Feh­ler­mel­dun­gen eine For­mu­lie­rung, die den Besu­chern nicht das Gefühl gibt, sie hät­ten einen dum­men, ver­meid­ba­ren Feh­ler began­gen. »Seite nicht gefun­den« beschreibt den ver­geb­li­chen Auf­ruf einer Res­source neu­tra­ler als »Feh­ler­hafte Ein­gabe« oder eine ähnlich offen­sive Formulierung.
Feh­ler prä­zise beschreiben
Tref­fen Sie eine klare Aus­sage dar­über, wel­cher Feh­ler auf­ge­tre­ten ist. Es kann einen Unter­schied machen, ob eine Res­source unter einem URI noch nie erreich­bar war oder ledig­lich aus irgend­ei­nem Grund nicht mehr erreich­bar ist.
Kon­struk­tive Hil­fe­stel­lun­gen anbieten
Feh­ler­mel­dun­gen die­nen nicht nur dazu, Nut­zer dar­auf auf­merk­sam zu machen, dass ein Feh­ler auf­ge­tre­ten ist, son­dern sie soll­ten dazu bei­tra­gen, den Feh­ler zu beheben.

Die­ser Arti­kel betrach­tet im Fol­gen­den die in der Tabelle auf­ge­führ­ten Feh­ler und gibt einige Hin­weise zur Gestal­tung der jewei­li­gen Fehlerseiten.

Zum Sei­ten­an­fang

Gestal­tung der Fehlerseiten

Die Stan­dard­feh­ler­sei­ten, die Brow­ser anzei­gen, wenn Sie keine eige­nen Feh­ler­sei­ten defi­nie­ren, geben kaum Hil­fe­stel­lung, wie Nut­zer an die gewünsch­ten Infor­ma­tio­nen gelan­gen, und wir­ken auf­grund ihres redu­zier­ten Designs wie ein Fremd­kör­per und nicht wie ein Teil Ihrer Web­site. Feh­ler­sei­ten soll­ten sich daher stets am Design Ihrer Web­site ori­en­tie­ren, also Kern­ele­mente wie Logo, Site Label, grund­le­gen­den Auf­bau und Navi­ga­ti­ons­struk­tur über­neh­men. Beson­ders wich­tig ist ein Link zur Home­page sowie zur Site­map. Dadurch kann der Besu­cher sich schnell ori­en­tie­ren und die gesuchte Res­source viel­leicht auf ande­rem Wege fin­den. Falls Ihrer Web­site aus mehr als nur einer Hand­voll Sei­ten besteht, Sie aller­dings keine Site­map anbie­ten, dann erstel­len Sie ein­fach eine! Jakob Niel­sen ver­rät in sei­ner Alert­box Site Map Usa­bi­lity, wie eine sol­che aus­zu­se­hen hat.

Ein Such­for­mu­lar oder ein Link dort­hin sollte auf kei­ner Feh­ler­seite feh­len. Das setzt natür­lich vor­aus, dass Sie auf Ihrer Site eine Such­funk­tion anbie­ten. Even­tu­ell erfüllt die Ein­bin­dung einer exter­nen Such­ma­schine wie bei­spiels­weise Google den glei­chen Zweck, aber dann soll­ten Sie prü­fen, ob alle von der Such­ma­schine gelis­te­ten URIs kor­rekt sind. Es wäre denk­bar unglück­lich, wenn ein Nut­zer durch eine Tref­fer­liste einer Such­ma­schine auf Ihre Site gelangt und dort mit einer 404-Fehlerseite begrüßt wird, die ihn wie­der zurück schickt.

Dar­über hin­aus gilt es, je nach Art des Feh­lers, beson­dere Kri­te­rien zu beachten.

401 – Unaut­ho­ri­zed

Eine 401-Fehlerseite dient dazu, einen Nut­zer auf­zu­fan­gen, wenn er ver­geb­lich ver­sucht hat, sich mit Benut­zer­na­men und Pass­wort auf einer Web­site anzumelden.

Stel­len Sie sich vor, ein Nut­zer klickt auf einen Link, der zu einem pass­wort­ge­schütz­ten Bereich Ihrer Site ver­weist. Er wird sich mit hoher Wahr­schein­lich­keit nicht anmel­den kön­nen, den Anmel­de­dia­log nach eini­gen Ver­su­chen abbre­chen und auf die­sem Weg zur Feh­ler­seite gelan­gen. Oder ein bereits regis­trier­ter Nut­zer hat seine Zugangs­da­ten ver­ges­sen bzw. das Pass­wort mehr­fach falsch ein­ge­tippt. Wenn Sie sich nun in die Lage des rat­lo­sen Nut­zers hin­ein­ver­set­zen, kom­men Sie schnell dar­auf, was eine 401-Fehlerseite ent­hal­ten sollte:

  • Eine ein­deu­tige Fehlermeldung,
  • eine Erläu­te­rung der Inhalte, die den Nut­zer im pass­wort­ge­schütz­ten Bereich erwar­ten, um ihm die Ent­schei­dung zu ermög­li­chen, ob sich eine Anmel­dung lohnt oder nicht,
  • einen Link zur Anmeldung,
  • einen Hin­weis zur kor­rek­ten Ein­gabe der Benut­zer­da­ten sowie
  • die Mög­lich­keit, sich die Zugangs­da­ten erneut zusen­den zu lassen.

403 – For­bid­den

Feh­ler der Art 403 begeg­nen Ihnen, wenn Sie ein Ver­zeich­nis auf­ru­fen (http://www.example.com/foo/), in dem es keine Datei gibt, die als Ver­zeich­nis­in­dex ange­ge­ben ist (index.htm, index.html, index.php oder andere), also kein Doku­ment auto­ma­tisch auf­ge­ru­fen wer­den kann, und für das auch kein auto­ma­ti­scher Ver­zeich­nis­in­dex ange­zeigt wer­den soll. Das Ver­zeich­nis einer Web­site, in dem alle Gra­fi­ken abge­legt sind, ist ein Kan­di­dat für ein sol­ches Ver­zeich­nis, denn in den meis­ten Fäl­len möchte man uner­wünsch­ten Besu­chern der­ar­tige Ein­bli­cke »unter den Rock« der eige­nen Web­site ver­weh­ren. Sie soll­ten in jedem Fall klar for­mu­lie­ren, dass der Zugriff auf das Ver­zeich­nis nicht erlaubt ist und den Besu­cher statt­des­sen zu einem Besuch Ihrer Web­site »vor der Absper­rung« einladen.

Ein­fach für Alle: So müs­sen hilf­rei­che 404-Fehlerseiten aussehen

404 – Not Found

Wer kennt das nicht? Man ruft eine Web-Ressource auf – und voll­kom­men uner­war­tet fin­det man sich im Nie­mands­land des Web wie­der. Dafür kann es fol­gende Gründe geben:

  • Der URI der Res­source wurde falsch ein­ge­tippt; ent­we­der in der Adress­zeile oder beim Anle­gen des Links.
  • Der Autor der Site wusste nicht, dass coole URIs sich nicht ändern und hat die Res­source gelöscht oder ver­scho­ben. Dadurch stim­men Lese­zei­chen, Links auf die Site sowie Ein­träge in Such­ma­schi­nen nicht mehr.

404-Fehler ent­de­cken und beheben

Feh­ler der Art 404 müs­sen Sie auf jeden Fall auf­fan­gen, schließ­lich han­delt es sich dabei um die am häu­figs­ten auf­tre­tende Art von Feh­ler im Web. Vor­bild­lich ist die 404-Fehlerseite der Initia­tive Ein­fach für Alle der Aktion Mensch (siehe Abbil­dung 1). Die Seite ist im Design der Web­site gehal­ten, schlägt einen sehr freund­li­chen Ton an und ist um kon­krete Hil­fe­stel­lung und Pro­blem­lö­sung bemüht.

Um stets auf dem Lau­fen­den zu blei­ben, wel­che 404er auf Ihrer Site auf­tre­ten, kön­nen Sie Ihre Besu­cher auf der Feh­ler­seite um eine Mail mit einer genauen Feh­ler­be­schrei­bung bit­ten, wie die 404-Fehlerseite der Initia­tive »Ein­fach für Alle« schön demons­triert – aber wie oft haben Sie eine sol­ches Feh­ler­for­mu­lar bereits aus­ge­füllt? –, oder Sie las­sen sich (zusätz­lich) bei jedem Auf­ruf der Feh­ler­seite eine auto­ma­tisch gene­rierte Mail zusen­den. Letz­te­res ist wesent­lich effektiver.

Viele moderne Pro­gram­mier­spra­chen bie­ten Mail­funk­tio­nen, die bei­spiels­weise bei Kon­takt­for­mu­la­ren ein­ge­setzt wer­den, um die gesam­mel­ten Infor­ma­tio­nen an eine Mail­adresse zu ver­schi­cken. Im fol­gen­den Bei­spiel wird die PHP-Funk­tion mail() ver­wen­det, um sich über jeden Zugriff auf die 404-Fehlerseite per Mail infor­mie­ren zu las­sen. Die Syn­tax der Funk­tion ist denk­bar einfach:

mail ( string Empfänger, string Betreff, string Nachricht
  [, string Header [, string Parameter]]);

Empfänger ent­hält dabei die E-Mailadresse des Emp­fän­gers. Betreff stellt die Betreff­zeile der E-Mail dar. Message ent­hält den eigent­li­chen Kör­per der Nach­richt. Header ist optio­nal und bie­tet die Mög­lich­keit, die Header-Informationen der E-Mail zu ver­än­dern. Ein vier­ter String Parameter kann seit PHP 4.0.5 unter Umstän­den dazu ver­wen­det wer­den, zusätz­li­che Para­me­ter an das Pro­gramm zu übergeben

Das fol­gende Beispiel-Skript ver­wen­det für die ers­ten vier Argu­mente der Funk­tion eine Varia­ble und stellt so die kon­kre­ten Inhalte, ins­be­son­dere den des Nachrichten-Körpers, indi­vi­du­ell zusam­men. Dabei hilft der Kon­ka­te­na­ti­ons­ope­ra­tor (.=), den Quell­text über­sicht­lich zu gestal­ten. Mit ihm ist es mög­lich, zusätz­li­che Inhalte an das Ende eines in einer Varia­blen abge­leg­ten Strings anzu­hän­gen. Die Kom­men­tare soll­ten für das Ver­ständ­nis aus­rei­chend sein.

Ein­zige Beson­der­heit ist die Ver­wen­dung von Server-Variablen, die alle­samt in dem Array $_SERVER[] zur Ver­fü­gung ste­hen. In die­sem Skript wer­den fol­gende Varia­blen verwendet:

  • $_SERVER["SERVER_NAME"] gibt den Ser­ver­na­men zurück, (z.B. www.example.com),
  • $_SERVER["REQUEST_URI"] gibt den auf­ge­ru­fe­nen URI aus­ge­hend vom Root-Verzeichnis zurück (z.B. /index.html),
  • $_SERVER["HTTP_USER_AGENT"] gibt den Iden­ti­fi­ka­ti­ons­string des User-Agents zurück (z.B. Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.7.5) Gecko/20041108 Firefox/1.0) und
  • $_SERVER["HTTP_REFERER"] schließ­lich gibt den URI des auf­ru­fen­den Doku­ments zurück.
<?php
  // Fehlercode
  $fehlercode = "404";
  // Adresse, an welche die E-Mail versendet werden soll
  $empfaenger = "mail@example.com";
  $betreff = "[" . $_SERVER["SERVER_NAME"] . "] Fehler " . $fehlercode;
  // Nachricht zusammenbauen.
  $message = "Auf der Website http://" . $_SERVER["SERVER_NAME"] . " ist ein Fehler " . $fehlercode . " aufgetreten.\n\n";
  $message .= "Aufgerufene Ressource:\n";
  $message .= "http://" . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]."\n\n";
  $message .= "User-Agent:\n";
  $message .= $_SERVER["HTTP_USER_AGENT"];
  if($_SERVER["HTTP_REFERER"] != "") {
    $message .= "\n\nAufgerufen von der Adresse:\n";
    $message .= $_SERVER["HTTP_REFERER"];
  }
  // Header-Informationen
  $header = "From: Error Agent <erroragent@" . $_SERVER["SERVER_NAME"].">\n";
  $header .= "Content-Type: text/plain";
  // Mail zusammenstellen und absenden
  @mail($empfaenger, $betreff, $message, $header);
?>

Das Feld From des E-Mail-Headers erwar­tet die Angabe der Mail­box des Absen­ders, also eine E-Mailadresse. Um den­noch einen Indi­vi­du­el­len Absen­der­na­men ange­ben zu kön­nen, ist fol­gende Nota­tion notwendig:

From: Name <E-Mailadresse>

Das @ vor dem Auf­ruf der Funk­tion mail() bewirkt, dass Rück­mel­dun­gen, ins­be­son­dere Feh­ler­mel­dun­gen der Funk­tion, unter­drückt wer­den. Somit erhal­ten Sie auch dann keine stö­rende Feh­ler­mel­dung, wenn auf localhost kein Mail-Server vor­han­den oder etwas ande­res schief gelau­fen und PHP so kon­fi­gu­riert ist, Feh­ler auf der Web­seite auszugeben.

Die­ses Skript funk­tio­niert auch für andere Feh­ler­codes, bei­spiel­weise für Feh­ler der Art 403. In die­sem Fall brau­chen Sie nur den Wert der Varia­ble $fehlercode zu ändern. Alter­na­tiv kön­nen Sie für meh­rere Feh­ler­ar­ten das glei­che Feh­ler­do­ku­ment ver­wen­den, indem Sie dem URI bei der ErrorDocument-Direk­tive einen Para­me­ter mit­ge­ben und die­sen der Varia­ble $fehlercode zu Beginn des Skripts mit

$fehlercode = $_GET["errorcode"];

ent­spre­chend zuweisen:

ErrorDocument 403 /error/document?errorcode=403
ErrorDocument 404 /error/document?errorcode=404

410 – Gone

Wenn Sie Res­sour­cen kom­plett aus Ihrer Web­site ent­fernt haben (natür­lich nur, wenn es einen guten Grund gibt), soll­ten Sie kei­nen 404er, son­dern Feh­ler­code 410 sen­den. Im Apa­che Web­ser­ver errei­chen Sie dies über die Zeile

Redirect Gone /foo/bar

in der Zugriffs­kon­troll­da­tei. Dadurch wird unmiss­ver­ständ­lich klar, dass es die ange­for­derte Res­source unter die­sem URI zwar mal gege­ben hat, sie aber nicht auf­grund eines Ver­se­hens oder Feh­lers vor­über­ge­hend nicht ver­füg­bar ist, son­dern bewusst aus dem Netz genom­men wurde. Wäh­len Sie eine For­mu­lie­rung wie »Das ange­for­derte Doku­ment ist nicht mehr ver­füg­bar« oder ähnliches.

1 Kommentar

Hinterlasse eine Antwort

Pflichtfelder sind mit * markiert.

*