Eric: Fehlerdokumente im Apache

Guten Morgen...

Folgende Problemstellung:

ich möchte für meine Virtual Hosts jeweils eigene Fehlerdokumente erstellen...
Ich habe es folgendermaßen in <Virtual Host> eingetragen.

<VirtualHost 192.168.....>
     ServerAdmin webmaster@net.de
     DocumentRoot /www/net/
     ServerName www.net.de
     ErrorDocument 404 /www/net/error/error404.html
</VirtualHost>

Leider funtzt das so nicht, obwohl so in mehreren Apache-Büchern und auch auf  http://httpd.apache.org/docs-2.0/de/mod/core.html#errordocument  so steht...

Wisst ihr, was ich hier falsch gemacht habe?

Gruß Eric

  1. DocumentRoot /www/net/
         ErrorDocument 404 /www/net/error/error404.html

    Leider funtzt das so nicht,

    Nur nebenbei: Auch durch das superduperhippe Verb "funzen" bekommt die Aussage "funktioniert nicht" keinerlei hilfreichen Inhalt. Bitte bemühe Dich, bei zukünftigen Fragen eine Fehlerbeschreibung mitzuliefern. Du erleichterst das Antworten erheblich.

    obwohl so in mehreren Apache-Büchern und auch auf  http://httpd.apache.org/docs-2.0/de/mod/core.html#errordocument  so steht...

    Nein, da irrst Du. Es ist sicherlich nicht unbedingt offensichtlich, aber _so_ steht es dort bestimmt nicht beschrieben.

    So ziemlich alle Dokumentangaben der Apache-Konfiguration beziehen sich auf das Dokumentenverzeichnis. Das gilt auch für den Pfad von ErrorDocument.

    Gruß,
      soenk.e

    1. Hi Soenke,

      Nur nebenbei: Auch durch das superduperhippe Verb "funzen" bekommt die Aussage "funktioniert nicht" keinerlei hilfreichen Inhalt. Bitte bemühe Dich, bei zukünftigen Fragen eine Fehlerbeschreibung mitzuliefern. Du erleichterst das Antworten erheblich.

      Fehlerbeschreibung: Apache ignoriert den von mir angegebenen Pfad und nimmt als ErrorDocument die Standard-Dokumente.

      Nein, da irrst Du. Es ist sicherlich nicht unbedingt offensichtlich, aber _so_ steht es dort bestimmt nicht beschrieben.

      In einem Apache-Buch stehts folgendermaßen:

      Syntax:   ErrorDocument Fehlercode Dokument
      Default:  (Die internen Fehlerdokumente werden verwendet)
      Kontext:  Serverkonfiguration, <VirtualHost>, <Directory>,
                <Location>, <Files>, .htaccess

      ErrorDocument 500 /error/server_error.html
      ErrorDocument 404 /cgi-bin/not_found
      ErrorDocument 410 http://host.domain.tld/error/gone.html
      ErrorDocument 403 "Der Zugriff ist nicht erlaubt."

      --> So habe ich es doch bei mir auch gemacht.

      So ziemlich alle Dokumentangaben der Apache-Konfiguration beziehen sich auf das Dokumentenverzeichnis. Das gilt auch für den Pfad von ErrorDocument.

      Wie meinst du das? Heißt das, dass ich die Error-Datei eines Virtuellen Hosts auch in den DocumentRoot des Hosts legen muss?

      Gruß und vielen Dank
      Eric

      1. Nein, da irrst Du. Es ist sicherlich nicht unbedingt offensichtlich, aber _so_ steht es dort bestimmt nicht beschrieben.

        ErrorDocument 404 /cgi-bin/not_found

        --> So habe ich es doch bei mir auch gemacht.

        Nein, wirklich nicht. Schau nochmal ganz genau hin:

        ErrorDocument 404 /www/net/error/error404.html

        Es besteht ein signifikanter Unterschied zwischen der Zeile aus der Anleitung und Deiner Zeile. Überlege Dir, wo /cgi-bin normalerweise liegt. Überlege Dir dann, welche Auswirkungen diese Erkenntnis auf Deine Angabe hat.

        Schaue auch in jedem Fall nochmal in die (richtige) Anleitung unter http://httpd.apache.org/docs/mod/core.html#errordocument. Insbesondere der Punkt drei der vier aufgelisteten und das dort hervorgehobene Wort dürften Dich brennend interessieren.

        So ziemlich alle Dokumentangaben der Apache-Konfiguration beziehen sich auf das Dokumentenverzeichnis. Das gilt auch für den Pfad von ErrorDocument.

        Wie meinst du das? Heißt das, dass ich die Error-Datei eines Virtuellen Hosts auch in den DocumentRoot des Hosts legen muss?

        Ja, aber das ist nicht Dein Problem, denn Deine Fehlerdokumente liegen bereits innerhalb Deines DocumentRoot.

        Gruß,
          soenk.e

        1. ErrorDocument 404 /cgi-bin/not_found

          ErrorDocument 404 /www/net/error/error404.html

          Es besteht ein signifikanter Unterschied zwischen der Zeile aus der Anleitung und Deiner Zeile.

          Wenn ich es richtig verstehe, meinst du, dass sich die Error-Datei im Ordner "cgi-bin" befinden muss?

          Überlege Dir, wo /cgi-bin normalerweise liegt. Überlege Dir dann, welche Auswirkungen diese Erkenntnis auf Deine Angabe hat.

          Der Ordner "cgi-bin" befindet sich bei mir unter "/www/Apache~1/Apache2/cgi-bin".
          Darin habe ich dann einen Ordner "not_found" angelegt, worin sich die Datei "error.html" befindet.
          Sicherlich mache ich noch irgendeinen Fehler, den ich leider nicht bemerke.

          Schaue auch in jedem Fall nochmal in die (richtige) Anleitung unter http://httpd.apache.org/docs/mod/core.html#errordocument.

          Ich denke, in diesem Abschnitt steht dasselbe wie in meinen Apache-Büchern. Mit Sicherheit verstehe ich irgendwie den Inhalt falsch, da ich wieder zur selben Erkenntnis, wie vorhin, gekommen bin.

          Ich glaube, langsam beginne ich dich zu nerven Sönke, oder?

          Vielen Dank
          Eric

          1. hallo Eric,

            Schaue auch in jedem Fall nochmal in die (richtige) Anleitung unter http://httpd.apache.org/docs/mod/core.html#errordocument.

            Ich denke, in diesem Abschnitt steht dasselbe wie in meinen Apache-Büchern.

            Möglich, das muß aber nicht zwingend so sein. Es gibt ein paar kleine Unterschiede zwischen Apache 1.3.x und 2.0.x. Für dich ist die Dokumentation zur 2.0.x die richtige Lektüre, und die findest du unter http://httpd.apache.org/docs-2.0/custom-error.html

            Grüße aus Berlin

            Christoph S.

            1. Für dich ist die Dokumentation zur 2.0.x die richtige Lektüre, und die findest du unter http://httpd.apache.org/docs-2.0/custom-error.html

              In dieser Lektüre habe ich einen Hinweis gefunden, und zwar, dass das ErrorDocument nur für .htaccess möglich ist, wenn AllowOverride dementsprechend gesetzt ist.

              Und jetzt meine Frage, wie muss es denn gesetzt sein?

              Noch eine Frage Christoph...
              Muss ich meine ErrorDatei nun im Ordner "cgi-bin" ablegen oder ist dieser Pfad frei wählbar?

              Gruß Eric

              1. hallo Eric,

                In dieser Lektüre habe ich einen Hinweis gefunden, und zwar, dass das ErrorDocument nur für .htaccess möglich ist, wenn AllowOverride dementsprechend gesetzt ist.
                Und jetzt meine Frage, wie muss es denn gesetzt sein?

                Das findest du in derselben Dokumentation unter http://httpd.apache.org/docs-2.0/de/mod/core.html#allowoverride.

                Muss ich meine ErrorDatei nun im Ordner "cgi-bin" ablegen oder ist dieser Pfad frei wählbar?

                Der Pfad ist frei wählbar. /cgi-bin halte ich persönlich sogar für ungeeignet, dort sollten imho nur "Scripts" liegen.

                Grüße aus Berlin

                Christoph S.

          2. ErrorDocument 404 /cgi-bin/not_found

            ErrorDocument 404 /www/net/error/error404.html

            Es besteht ein signifikanter Unterschied zwischen der Zeile aus der Anleitung und Deiner Zeile.

            Wenn ich es richtig verstehe, meinst du, dass sich die Error-Datei im Ordner "cgi-bin" befinden muss?

            Ohje, nein. Du siehst den Wald offenbar vor lauter Bäumen nicht mehr :)

            Schaue auch in jedem Fall nochmal in die (richtige) Anleitung unter http://httpd.apache.org/docs/mod/core.html#errordocument.

            Ich denke, in diesem Abschnitt steht dasselbe wie in meinen Apache-Büchern.

            Du hast den entscheidenden Satz gerade abgeschnitten:

            Insbesondere der Punkt drei [..] und das dort hervorgehobene Wort dürften Dich brennend interessieren.

            Der Punkt drei lautet:

            3. redirect to a local _URL-path_ to handle the problem/error

            Obacht, es ist von einer URL die Rede! Ein Pfad im Dateisystem ist aber keine vom Webserver zu verarbeitende URL. Womit wir dann zu dem entscheidenden Unterschied kommen, auf den ich Dich aufmerksam machen wollte:

            ErrorDocument 404 /cgi-bin/not_found

            ErrorDocument 404 /www/net/error/error404.html

            In der Anleitung ist eine lokale URL angegeben, "/cgi-bin/not_found", Du hingegen benutzt einen absoluten Pfad in Deinem Dateisystem, "/www/net/error/error404.html".

            Da der Webserver aber eine URL erwartet (und keinen Dateipfad), sucht er im Dokumentenverzeichnis (!) nach "/www/net/error/error404.html", was wiederum im Dateisystem "/www/net/www/net/error/error404.html" entspricht (DocumentRoot + ErrorDocument) - und diese Datei gibt es nicht.

            Fazit:

            ErrorDocument 404 /error/error404.html

            Ich hoffe, Dir geht jetzt ein Licht auf :)

            Ich glaube, langsam beginne ich dich zu nerven Sönke, oder?

            Vielen Dank

            Das Dankeschön entschädigt mehr als Du denkst, wirklich.

            Gruß,
              soenk.e