Matze: Apache Konfiguration -> Error Files

Servuc Leute,
irgendwie schaffe Ich es nicht dem Apache klar zu machen, dass er bei einem Error 404 File not Found eine bestimmte Datei anziehen und anzeigen soll.

Dank Buch und doku ist das soweit ja beschrieben nur bei der realisierung will der apache nicht.

Die Config Datei....

Alias /error/ "d:/web/error"

<Directory "/error/">
        AllowOverride None
        Options IncludesNoExec
        AddOutputFilter Includes html
        AddHandler type-map var
        Order allow,deny
        Allow from all
        LanguagePriority en de es fr it nl sv
        ForceLanguagePriority Prefer Fallback
    </Directory>

#    ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
#    ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
#    ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
    ErrorDocument 404 /error/HTTP_404.html
#    ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var
#    ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var
#    ErrorDocument 410 /error/HTTP_GONE.html.var
#    ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var
#    ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var
#    ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
#    ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var
#    ErrorDocument 415 /error/HTTP_SERVICE_UNAVAILABLE.html.var
#    ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var
#    ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var
#    ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var
#    ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
#    ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var

Ich hab bei den Verzeichnis angaben jetzt schon so ziemlich alles durch wer kann mir dabei helfen?

  1. Ich bin bei meinem Problem etwas weiter gekommen.
    Allerdings stehe ich vor einem neuen Problem.
    Die Seite kann unterschiedliche aufgerufen werden.

    Beisepiel:

    internet www.testserver1.de
    intranet wwi.testserver2.de

    etc. Hierbei geht es darum, dass der gleiche Rechner mit unterschiedlichen Namen bzw. IP Adresse ansprechbar sein sill.
    Vom intranet kann nicht auf www.testserver1.de zugegriffen werden.
    Hierbei blockt die Firewall den Zugriff ab.

    Wie muss nun die Config Datei aussehen, dass die Error Datei 404.html im Verzeichnis d:/web/error korrekt und gleichermassen angezeigt wird.

    Mit einer festen Pfad auf www.testserver1.de/error/4004.html konnte Ich zwar von einer Seite die Fehlerseite anzeigen jedoch kann ich von der anderen nicht darauf zugreifen...
    Ich muss also eine relative weiterleitung einrichten.

    Wer kann mir dabei helfen??

    1. etc. Hierbei geht es darum, dass der gleiche Rechner mit unterschiedlichen Namen bzw. IP Adresse ansprechbar sein sill.

      Wie muss nun die Config Datei aussehen, dass die Error Datei 404.html im Verzeichnis d:/web/error korrekt und gleichermassen angezeigt wird.

      Benutze ServerName, ServerAlias und eventuel Listen, um verschiedene Namen und IP-Adressen anzugeben, auf die der Apache einen bestimmten Inhalt ausspucken soll.

      Mit einer festen Pfad auf www.testserver1.de/error/4004.html konnte Ich zwar von einer Seite die Fehlerseite anzeigen jedoch kann ich von der anderen nicht darauf zugreifen...
      Ich muss also eine relative weiterleitung einrichten.

      Mit Weiterleitungen wird das überhaupt nichts. Die in ErrorDocument angegebenen Objekte sollen das angeforderte Objekt ersetzen und nicht auf eine Fehlermeldung weiterleiten. Dementsprechend sind absolute Angaben bei ErrorDocument etwas sehr unglücklich.

      Prüfe erstmal, ob Du überhaupt auf Deine Fehlerseiten zugreifen kannst, also durch Eingabe von www.blabla/error/HTTP_404.html und www1.blabla/error/HTTP_404.html in Deinem Browser.
      Dann prüfe anhand des Fehlerprotokolls, ob es Schwierigkeiten gibt beim Zugriff auf die Fehlerseiten (im Fehlerfall).

      Gruß,
        soenk.e

      1. Servus,

        sowie war Ich schon. Ich kann tadlelos auf die erstellten Error Seiten zugreifen.
        Das einzige Problem das vorherscht ist, dass ich nur bedingt auf diese Seiten zugreifen kann.
        Sprich von Zone eins kann ich eben nur über testserver1/error/404.htm zugreifen bzw. aus Zone 2 nur über testserver2/error/404.htm

        generell kann Ich doch in einem link ab einem gewissen bereich relative Pfade angeben d.h. /error/404.htm im endeffekt bedeutet dies, dass ich von jeder Seite egal ob aus Zone 1 oder 2 aufgerufen immer auf die richtige Seite zugreifen.

        Wie schaut Dein Lösungsvorschlag technisch aus -> wie sieht dazu die Konfiguration aus?? Apache ist nunmal nicht meine stärke...

        1. sowie war Ich schon. Ich kann tadlelos auf die erstellten Error Seiten zugreifen.
          Das einzige Problem das vorherscht ist, dass ich nur bedingt auf diese Seiten zugreifen kann.
          Sprich von Zone eins kann ich eben nur über testserver1/error/404.htm zugreifen bzw. aus Zone 2 nur über testserver2/error/404.htm

          Was ist Zone 1 und Zone 2?

          Also:
          "http://testserver1/error/404.htm" und "http://testserver2/error/404.htm" in der Adressleiste des Browsers eingegeben, funktioniert?
          Falls dem so ist, muß Deine Alias-Anweisung korrekt sein, am <directory>-Block kann es ebenfalls nicht liegen, obwohl Du dort -wie Andreas schon sagte- einen absoluten Windows-Pfad angegeben solltest, keine URL.

          Was passiert nun, wenn Du "http://testserver1/gibtsnicht" bzw. "http://testserver2/gibtsnicht" eintippst?

          generell kann Ich doch in einem link ab einem gewissen bereich relative Pfade angeben d.h. /error/404.htm im endeffekt bedeutet dies,

          /error/404.htm ist ein absoluter Pfad, denn er beginnt mit einem Schrägstrich. Verwechsle URLs nicht mit dem Windows-Dateisystem.

          Wie schaut Dein Lösungsvorschlag technisch aus -> wie sieht dazu die Konfiguration aus?? Apache ist nunmal nicht meine stärke...

          Sollen ein- und dieselben Webseiten unter verschiedenen Domains (testserver1 und testserver2) ansprochen werden können? Benutzt Du VirtualHosts?

          Gruß,
            soenk.e

          1. Nein kein Virtual host meines wissens nach.
            Ich greife von 2 zonen auf den Rechner zu.
            testserver1 ist nur aus Zone 1 erreichbar testserver2 ist nur aus Zone 2 erreichbar. Jeweils unterschiedliche IP Adresse -> 2 Netzwerkkarten.

            Aus zone 1 kann ich
            http://testserver1/error/404.htm
            erreichen

            aus Zone 2

            http://testserver2/error/404.htm

            Gruns hierfür ist eine DMZ Trennun intern und extern.
            Allerdings sollen bestimmte inhalte so unter anderem dei Fehler dateien nicht doppelt gepflegt werden.

            Deswegen, dachte Ich, dass der apache wenn ich das Dateisystem angebe mir den richtigen Inhalt dazu liefert. Eine feste URL kann ich jedoch hierzu nicht ageben.

            Meine Überlegen war, über den Alias immer das dokument d:/web/error/404.html anzufordern. Dabe ging ich davon aus, dass der apache bei einem Fehlerfall wie dem 404 das dokument aus dem Dateisystem zieht und an den Client weiter leitet.

            Wegen der 2 Domänen und der völlig unterschiedlichen Adressbereichen -> 3 unterschiedliche Gateways usw. Wie schon gesagt DMZ trennung.... kann ich eben nicht hard eine URL zu dem dokument kodieren. Die hbe ich schon versucht und klappt dann jeweils nur von der einen oder anderen Zone. Ich benötige jedoch eine Lösung um von beiden zonen darauf zugreifen zu können.

            Ein weiterer Server der extern steht ist eigentlich nicht der richtige weg. Da macht unter andeem auch die Security nicht mehr mit.

            1. Anmerkung:

              Es handelt sich hierbei um einen Server mit 2 IP Adresse und Anbindung an 2 Netzwerkzonen.

              1. Anmerkung 2:

                Die oben genannte Server existieren tatsächlich sind jedoch nicht meine URLs......

                das war nur als Beispiel gedacht...

            2. Aus zone 1 kann ich
              http://testserver1/error/404.htm
              erreichen

              aus Zone 2

              http://testserver2/error/404.htm

              Ok, soweit klar. Aber was passiert denn nun eigentlich, wenn Du eine URL angibst, die nicht existiert, d.h. was gibt er für Fehler aus? Dein Problem ist doch -soweit ich Dich verstanden habe-, daß bei einer IP/Domain nicht die gewünschte Fehlerseite, sondern die kurze Standardmeldung des Apache kommt?
              Was steht im Zugriffs- und Fehlerprotokoll des Webservers?

              Meine Überlegen war, über den Alias immer das dokument d:/web/error/404.html anzufordern.

              Das ist auch richtig so und funktioniert ja offenbar auch, denn andernfalls würde bei den beiden obigen ../error/404.htm ja statt eben dieser 404.htm eine kurze Standardmeldung kommen (ich hoffe, Du hast dafür gesorgt, die Fehlerseiten auseinander halten zu können).

              Gruß,
                soenk.e

              1. Das Problem ist, wenn ich aus dmz 1die url für dmz 1 aufrufe erscheint bei der harten codierung von http://testserver1/error/404.html

                beim aufruf aus dmz 2 kennt er den Server nicht.
                Verständlich oder bei der 2. Konfiguration wo Ich den Pfad per d:/web/error/ angebe meldet mir der Server auschliesslich eine 404 egal von wlecher DMZ ich komme.

                Genau da liegt mein Problem.

                1. Jetzt bin ich weiter und blick gleich gar nicht mehr durch.
                  Ich habe bei dem dokument wieder auf das Verziechnis lokal vereiwesn d:/ usw.

                  Wenn ich jetzt, egal von wo, eine nicht existierende Datei versuche zu erreichen kommt eine 302. Dabei gab es die Seite noch nie und wurde auch nie umgezogen.

                  So langsam nervt der apache.

                  1. Das Problem ist, wenn ich aus dmz 1die url für dmz 1 aufrufe erscheint bei der harten codierung von http://testserver1/error/404.html

                    Gib Dir bitte etwas mehr Mühe bei Deinen Problembeschreibungen. Mit diesem Gestammel aus Abkürzungen und halbfertigen Sätzen kann niemand etwas anfangen.

                    Konkret: Was "erscheint bei der harten codierung von http://testserver1/error/404.html"? Findest Du diese Information irgendwo in Deinem obigen Satz? Nein? Warum schreibst Du ihn nicht zu Ende?
                    Und was meinst Du mit "harte Codierung", die Angabe von http://testserver1/error/404.html in ErrorDocument?

                    Verständlich oder bei der 2. Konfiguration wo Ich den Pfad per d:/web/error/ angebe meldet mir der Server auschliesslich eine 404 egal von wlecher DMZ ich komme.

                    "Verständlich oder wo ich [..] angebe" - was um alles in der Welt ist das für ein Satzbau? Was ist verständlich? Und wieso "oder"? Und wo kommt die zweite Konfiguration her, bislang war immer nur von einer die Rede.

                    Ich habe bei dem dokument wieder auf das Verziechnis lokal vereiwesn d:/ usw.

                    Genau, "Verziechnis vereiwesn d:/ usw.". Ich verstehe kein Wort, was für ein Dokument, wieso lagerst Du jetzt plötlich Dateien im Wurzelverzeichnis von d:/?

                    Wenn ich jetzt, egal von wo, eine nicht existierende Datei versuche zu erreichen kommt eine 302.

                    Deinen Ausführungen nach vermute ich mal, daß Du jetzt eine komplette URL ("http://testserver1/error/404.html") als ErrorDocument angegeben hast. Da der Server keinen Zugriff auf (aus seiner Sicht, eine Detailprüfung der Domain findet nicht statt) entfernte Dokumente hat, muß er zwangsläufig eine Weiterleitung statt des eigentlichen Fehlercodes ausgeben.

                    So langsam nervt der apache.

                    Bei dem verbalen Chaos, das Du hier ablässt, habe ich eher den Eindruck, das eigentliche Problem sitzt vor Deinem Rechner.

                    Gruß,
                      soenk.e

                    1. Also nochmals Satz für Satz......
                      Wenn ich die oben genannte URL aus DMZ 1 ausrufe bekomme ich die entsprehcnede Fehlerseite zu sehen.

                      Zu erleuterung:

                      d:/web ist das Verzeichnis wo alle html inhalte liegen die hier liegende index.html kann ich per www.testserver1.de erreichen.

                      d:/web/error ist das Verzeichnis wo alle Fehlerdateien 400.html 401.html usw liegen.

                      Ich hoffe du kannst noch folgen.

                      wenn ich nun die url www.testserver1.de/error/404.html aufrufe bekomme ich fehlerfrei die Seite zu sehen.

                      ACHTUNG!!!!
                      Jetzt wird es kompliziert. Ich habe 2 Netzwerkkarten in dem Rechner welche an 2 unterschiedliche DMz gebunden sind.
                      aus DMZ2 ist der testserver1 nicht bekannt. Dafür aber der Testserver2 und umgekehrt.

                      Mein Problem ist nun, dass
                      bei folgender Konfiguration

                      ErrorDocument 404 "d:/web/error/404.html"

                      Mein Browser eine 404 bekam daselbige stand auch im logfile.
                      Nach Änderung auf: ErrorDocument 404 "http://testserver1.de/error/404.html" konnte ich nzwar beim aufruf eines nicht existierenden Dokumentes die Fehlerseite auf DMZ1 bekommen jedoch nicht auf einem Rechner auf DMZ2 -> Host unbekannt.

                      Also habe ich den eintrag auf
                      ErrorDocument 404 "d:/web/error/404.html"
                      zurück geaendert. Fakt ist nun, dass ich anstatt einer 404 eine 302 bekomme. Die Aufgerufe Seite www.testserver1.de/keineseite.html
                      hat jedoch noch nie existiert und wird auch niemals existiern folgedessen ist diese auch nicht umgezogen und woanderster verfügbar.

                      302 besagt diese jedoch aus.
                      Aber warum?

                      Und warum liefert mir der apache bei:

                      ErrorDocument 404 "d:/web/error/404.html"

                      und dem aufruf von http://www.testserver1.de/keinehtml.html nicht die gewünschte 404.html die definitiv existiert.???

                      1. ErrorDocument 404 "d:/web/error/404.html"
                        zurück geaendert. Fakt ist nun, dass ich anstatt einer 404 eine 302 bekomme.

                        Den Grund hatte ich bereits beschrieben. Und so steht's in der Apache-Anleitung:

                        "Note that when you specify an ErrorDocument that points to a remote
                           URL (ie. anything with a method such as "http" in front of it),
                           Apache will send a redirect to the client to tell it where to find
                           the document, [..]"

                        ErrorDocument akzeptiert nur URLs (oder eine Textzeile, das interessiert jetzt aber nicht). "d:/web/error/404.html" ist keine URL, sondern ein Pfad im Windows-Dateisystem, kann vom Apache aber als absolute URL angesehen werden, weil es mit einem vermeintlichen Protokoll "d:" beginnt (vergleiche "http:" oder "ftp:" bei echten Protokollen). Wenn überhaupt, müsste es in etwa "file:d:\web\error\404.html" lauten, das ist aber bei Dir natürlich Humbug.

                        Die richtige ErrorDocument-Angabe müsste folgendermaßen aussehen:

                        ErrorDocument 404 /error/404.html

                        Jede andere Möglichkeit funktioniert nicht wie gewünscht.

                        Gruß,
                          soenk.e

                        1. Die richtige ErrorDocument-Angabe müsste folgendermaßen aussehen:

                          ErrorDocument 404 /error/404.html

                          Jede andere Möglichkeit funktioniert nicht wie gewünscht.

                          Genau damit habe ich ja angefangen.

                          Vermutlich war das mit dem alias der Grunlegende Fehler.

                          Danke es klappt. :-))

  2. Hi,

    irgendwie schaffe Ich es nicht dem Apache klar zu machen, dass er bei einem Error 404 File not Found eine bestimmte Datei anziehen und anzeigen soll.
    Dank Buch und doku ist das soweit ja beschrieben nur bei der realisierung will der apache nicht.
    Die Config Datei....
        Alias /error/ "d:/web/error"

    Also scheinbar (wegen d:) ein Windows-System.

    <Directory "/error/">

    Hier hast Du eine Directory-Direktive benutzt, aber eine Location angegeben...
    /error/ ist kein (absoluter Pfad für ein) Directory unter Windows.
    ggf. setzt der Apache c: davor (bzw. das Laufwerk, auf dem er installiert ist).
    Er setzt auf keinen Fall d:/web davor - allerhöchstens d:, falls er auf d: installiert wäre.

    Du konfigurierst hier also ein Verzeichnis, das NICHTS mit dem Verzeichnis zu tun hat, in dem sich Deine Fehlerdateien befinden.

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
    1. Wenn ich dein Posting richtig verstanden habe, ist
      die erstellung des Alias /error/ d:/web/error/
      keine Alias den ich später als /error/.... verwenden kann?
      War das so richtig interpretiert?
      Wenn ja dann ist mir das Problem klar, jedoch wenn ich auf
      ErrorDocument 404 "d:/web/error/404.html"
      verweise klappt das leider auch nicht. Dei Datei ist da und ich kann auch über Apache darauf zugreifen...

      1. Hi,

        Wenn ich dein Posting richtig verstanden habe, ist
        die erstellung des Alias /error/ d:/web/error/
        keine Alias den ich später als /error/.... verwenden kann?

        Nein, Du hast mich falsch verstanden.

        Der Alias ist in Ordnung.
        Der directory-Eintrag ist falsch, weil Du dort nicht das Directory, sondern die Location (= den Alias) angegeben hast.

        cu,
        Andreas

        --
        Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
        http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
        1. Grunsätzlich habe ich jedoch der doku entnommen, dass mit der Verwendung des Allias auf den definierten Pfad zugegriffen wird.

          Oder ist das wieder falsch...