Webserver/htaccess/Fehlermeldungen

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Per Voreinstellung zeigt der Webserver eine in seiner Konfiguration festgelegte HTML-Datei oder eine hart kodierte Fehlermeldung an, wenn ein Zugriffsfehler passiert, z. B. wenn eine angeforderte Datei nicht existiert.

Dieses Kapitel zeigt, wie sie mit einer .htaccess-Datei individuelle Fehlermeldungen ausgeben können.

Individuelle Fehlermeldungen gestalten

4o4-icon.svg

Mit ErrorDocument definieren Sie eine eigene Meldung oder Datei, die im Fehlerfall angezeigt wird. Hinter dem Schlüsselwort notieren Sie den gewünschten HTTP-Status-Code – typische Fehler, die auftreten können, sind jene mit den Nummern 403, 404 und 500. Hinter der Nummer mit dem Status-Code können Sie entweder in Anführungszeichen eine eigene Fehlermeldung notieren, oder Sie geben die Adresse einer Webseite an, die im Fehlerfall angezeigt werden soll. Es gibt drei mögliche Varianten:

hart kodierte Meldungen

Das bedeutet, dass die Meldung direkt vom Webserver erzeugt wird. Der Wortlaut muss also auch vorgegeben werden, was in folgenden Formen geschehen kann:

Beispiel 1 - hartkodierte Fehlermeldung als reiner Text
# Text für individuelle Fehleranzeige
ErrorDocument 404 "Ups. Was haben Sie denn da für Unsinn angestellt -\
                   die angeforderte Ressource gibt es hier ja gar nicht ;-)"
Beachten Sie: Zugegeben, der Text ist etwas frech, variieren Sie ihn bitte und wählen Sie eine höflichere Ausdrucksweise. Sie können einen beliebig langen Text notieren, aber es muss alles hintereinander ohne jeden Zeilenumbruch in einer einzigen Zeile geschrieben werden, oder es findet hier ausnahmsweise der Backslash als Zeilentrenner Verwendung, damit Sie es besser lesen können.
Die Ausgabe an den Browser erfolgt als reiner Text.[1]
Beispiel 2 - hart kodierte Fehlermeldung als HTML
# HTML für individuelle Fehleranzeige
ErrorDocument 404 "<html><head><title>Seite nicht vorhanden</title>\
                   <style>\
                   body {background-color:#EEEEEE;}\
                   h1,p,a {font-family:Helvetica,Arial,Sans-serif;}\
                   h1 {font-size:1.7em; margin-bottom:0em;}\
                   a:link,a:visited {color: midnightblue;}\
                   a:hover {background-color:LightBlue;}\
                   </style>\
                   </head><body>\
                   <h1>Fehler 404</h1>\
                   <p>Die angeforderte URL kann nicht gefunden werden.</p>\
                   <p>Probieren Sie es bitte erneut mit einem Aufruf der\
                   <a href='/'>Startseite</a>.</p>\
                   </body></html>"

Wie Sie sehen, sind HTML-Tags in solchen Meldungstexten zulässig. Es muss wiederum entweder alles hintereinander in einer Zeile geschrieben werden, oder Sie setzen den Backslash als Zeilentrenner ein. Ihren Browser interessieren solche Backslashes hier nicht.

Sie können, wenn Sie es für unabdingbar halten, in solchen hart kodierten HTML-Anzeigen sogar CSS-Bereiche (wie im angegebenen Beispiel) und JavaScript vorgeben. Allerdings müssen Sie beachten, dass doppelte Anführungszeichen die Fehlermeldung begrenzen und Sie somit einfache Anführungszeichen für HTML-Attribute verwenden müssen.

lokale Fehlerseiten

Anstelle solcher hart kodierter Fehlermeldungen, die vom Server direkt ausgegeben werden, können Sie natürlich auch eigene HTML-Dateien für die Fehleranzeige einsetzen.

Das bedeutet, dass ein lokales HTML-Dokument, das im selben Verzeichnis wie Ihre .htaccess-Datei liegt, die gewünschte Anzeige enthält. Dazu wird folgendes notiert:

Beispiel 3 - lokales HTML-Dokument im aktuellen Verzeichnis
# verzeichnisspezifisches HTML-Fehlerdokument
ErrorDocument 404 /verzeichnispfad/fehler404.html

Bei dieser Art der Notation gilt die Anzeige nur für das gerade aktuelle Verzeichnis. Das kann nützlich sein, wenn Sie Ihr Webangebot so strukturiert haben, dass ein Verzeichnis nur Grafiken, ein weiteres nur Bilder und ein drittes nur weitere Medien enthält und Sie bei eventuellen Fehlern auch inhaltsbezogene Meldungen ausgeben möchten.

Beachten Sie: Sie müssen solche lokale Fehlerdokumente immer ausgehend vom Wurzelverzeichnis / deklarieren. Geben Sie lediglich
ErrorDocument 404 fehler404.htm
an, interpretiert Apache das als String und übermittelt dem Browser lediglich "fehler404.htm" zur Anzeige - was sehr irritierend wirken kann.
Beispiel 4 - lokales HTML-Dokument im Wurzelverzeichnis
# projektspezifisches HTML-Fehlerdokument
ErrorDocument 404 /fehler404.htm

Wenn Sie das so notieren, brauchen Sie nur eine einzige Datei mit diesem Namen im Wurzelverzeichnis Ihres Webangebots. Das bedeutet aber auch, dass ihre Fehlerbeschreibung nicht variiert werden kann.

Eine Möglichkeit individuelle Fehlermeldungen auszugeben, wird in diesem Tutorial gezeigt:

externe Fehlerdokumente

Das bedeutet, dass die gewünschte Fehlerseite über eine externe URL angesprochen wird. Der Eintrag erhält dann folgendes Aussehen:

Beispiel 5 - externes HTML-Dokument als Fehlerseite
# externes HTML-Fehlerdokument
  ErrorDocument 404 https://example.com/fehler404.htm
Beachten Sie: Mit dieser Weiterleitung auf ein externes Dokument wird ein Redirect ausgelöst, was zu eventuell nicht erwünschten Nebeneffekten führen kann. Näheres dazu kann in der Apache-Dokumentation nachgelesen werden.

Exkurs: Node.js

Alle in diesen Artikeln gezeigten Beispiele von .htaccess-Dateien gelten nur für Apache-Server!

In Node.js wird dies direkt im Filesystem-Modul erledigt:

    // Check if the requested file exists
    fs.exists(filename, function (exists) {
        // If it doesn't
        if (!exists) {
            // Output a red error pointing to failed request
            console.log(RED + 'FAIL: ' + filename);
            // Redirect the browser to the 404 page
            filename = path.join(process.cwd(), '/404.html');
        // If the requested URL is a folder, like http://localhost:8000/catpics
        } else if (fs.statSync(filename).isDirectory()) {
            // Output a green line to the console explaining what folder was requested
            console.log(GREEN + 'FLDR: ' + WHITE + filename);
            // redirect the user to the index.html in the requested folder
            filename += '/index.html';
        }
Hauptartikel: Node.js/Webserver

Quellen

  1. Der Internet Explorer stellte solche servergenerierte Fehlermeldungen erst dann dar, wenn sie mehr als 512 Bytes belegten. Man konnte dieses Verhalten des Internet Explorer ändern, indem man in den Internetoptionen die als Voreinstellung aktivierte Option "Kurze HTTP-Fehlermeldungen anzeigen" deaktivierte.