Nina: Mit htaccess Variabel bei Fehler weitergeben

Hallo,

ich beziehe mich auf den folgenden Beitrag im Archiv: http://forum.de.selfhtml.org/archiv/2005/6/t109260/.

Ich möchte ebenfalls mit htaccess Fehler abfangen (das klappt auch!) und dann die aufgerufene, fehlerhafte Seite als Variabel weitergeben. Allerdings klappt das bei mir nicht so wie im Beitrag beschrieben. Die Fehler werden nur abgefangen, wenn ich die Fehlerseite mit http://... angebe, sonst wird selbst ein Fehler produziert und die Seite nicht gefunden - egal ob ich das relativ oder mit dem vollst. Pfad angebe.

Kann mir von Euch jemand helfen? Das wäre superlieb ....

Meine htaccess sie z. Zt. so aus:

#error documents
ErrorDocument 400 http://meineseite.de/fehler.php
ErrorDocument 401 http://meineseite.de/fehler.php
ErrorDocument 402 http://meineseite.de/fehler.php
ErrorDocument 403 http://meineseite.de/fehler.php
ErrorDocument 404 http://meineseite.de/fehler.php
ErrorDocument 500 http://meineseite.de/fehler.php

Wie muss ich das ändern, damit ich als Ergenbis des htaccess-Abfangs z.B. http://meineseite.de/fehler.php?err=/dir1/dir2/xyz.php erhalte?

Liebste Grüße, Nina

  1. Hallo Nina,

    ich beziehe mich auf den folgenden Beitrag im Archiv:
    http://forum.de.selfhtml.org/archiv/2005/6/t109260/.

    der gibt zwar schon den entscheidenden Hinweis, aber eine weitere wichtige Information fehlt noch.

    egal ob ich das relativ oder mit dem vollst. Pfad angebe.

    Der Knackpunkt ist, dass du hier sehr wohl den vollständigen Pfad angeben solltest. Nur eben nicht den Pfad, den ein HTTP-Client sieht, sondern den Pfad *im Dateisystem deines Servers*. Du musst also wissen, welches Verzeichnis auf dem Server der obersten Ebene deiner Website entspricht. Das kriegst du raus, indem du deinen Provider fragst; aber auch phpinfo() verrät dir diese wichtige Kleinigkeit (such in der Ausgabe nach DOCUMENT_ROOT).

    #error documents
    ErrorDocument 400 http://meineseite.de/fehler.php
    ErrorDocument 401 http://meineseite.de/fehler.php
    [...]

    Wenn du das so machst, kriegt dein Browser nicht den entsprechenden Statuscode geliefert, sondern nur eine Weiterleitung:
    "Das angeforderte Dokument liegt nicht da, wo du suchst, sondern unter http://meineseite.de/fehler.php. Hol's dir bitte von dort."
    Der Browser folgt dieser Aufforderung und ruft die Fehlerseite ab. Für ihn ist das ein ganz normaler HTTP-Request, auf technischer Ebene deutet nichts darauf hin, dass ein Fehler aufgetreten ist.
    Notierst du die Fehlerseiten dagegen mit

    ErrorDocument 401 /path/to/document/root/fehler.php

    dann regelt der Server das komplett selbst. Er liefert den Statuscode 401 (als Beispiel) und das angegebene ErrorDocument. Der Browser erkennt, dass ein Fehler aufgetreten ist, und was noch schöner ist: In der Adresszeile bleibt die Adresse der angeforderten Seite stehen, die den Fehler ausgelöst hat! Auch innerhalb des ErrorDocument kannst du nun -da es anscheinend in PHP realisiert ist- auch mit $_SERVER['REQUEST_URI'] die ursprünglich vom Besucher angeforderte Seite abfragen.

    ErrorDocument 403 http://meineseite.de/fehler.php
    ErrorDocument 404 http://meineseite.de/fehler.php
    ErrorDocument 500 http://meineseite.de/fehler.php

    Nebenbei bemerkt: Warum verwendest du für alle Fehlerbedingungen dieselbe Seite? Das bringt dem Besucher doch keine wirkliche Information.

    Schönen Tag noch,
     Martin

    --
    Es gibt Tage, da gelingt einem einfach alles.
    Aber das ist kein Grund zur Sorge; das geht vorbei.
    1. Hallo

      Das kriegst du raus, indem du deinen Provider fragst; aber auch phpinfo() verrät dir diese wichtige Kleinigkeit (such in der Ausgabe nach DOCUMENT_ROOT).

      OK, das habe ich gemacht!

      dann regelt der Server das komplett selbst. Er liefert den Statuscode 401 (als Beispiel) und das angegebene ErrorDocument.

      Leider klappt das trotzdem nicht, jetzt bekomme ich einen 404-Fehler. Der Pfad stimmt aber - sonst klappt es damit ja auch ???
      Die Fehler-datei ist auch da ???

      HAst Du eine Idee?

      Liebste Grüße, Nina

    2. hi,

      Der Knackpunkt ist, dass du hier sehr wohl den vollständigen Pfad angeben solltest. Nur eben nicht den Pfad, den ein HTTP-Client sieht, sondern den Pfad *im Dateisystem deines Servers*.

      Nein, auch den nicht.

      Du musst also wissen, welches Verzeichnis auf dem Server der obersten Ebene deiner Website entspricht.

      / ist es.

      Das kriegst du raus, indem du deinen Provider fragst; aber auch phpinfo() verrät dir diese wichtige Kleinigkeit (such in der Ausgabe nach DOCUMENT_ROOT).

      Nicht Document Root, sondern Web Root.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. Hi wahsaga!

        / ist es.

        mit / klappts auch nicht .... ??? ich verzweifle ...

        Nicht Document Root, sondern Web Root.

        Wie kriege ich das WebRoot raus?

        LG Nina

        1. hi,

          / ist es.

          mit / klappts auch nicht .... ??? ich verzweifle ...

          Dann teile uns bitte mit, wie deine Fehlerseite über HTTP zu erreichen wäre (http://domain/.../fehlerseite.htm), und wie genau du die Angabe jetzt gemacht hast.

          Hast du überhaupt die Möglichkeit, eigene Fehlerseiten zu definieren?
          Stichwort AllowOverride - mindestens FileInfo muss dir zugestanden sein, wenn du ErrorDocument verwenden willst. Frage deinen Provider danach, wenn du es nicht weißt.

          Wie kriege ich das WebRoot raus?

          Das brauchst du nicht rauskriegen, das _ist_ /

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
          1. Hallöchen,

            also die Fehlerseite ist zu erreichen über http://mein-server.de/fehler.de.

            Hast du überhaupt die Möglichkeit, eigene Fehlerseiten zu definieren?

            Soweit ich weis ja. Komischerweise klappt es ja auch, wenn ich eine ganz URL mit http:// angebe.

            LG, Nina

            1. hi,

              also die Fehlerseite ist zu erreichen über http://mein-server.de/fehler.de.

              Fein, das beantwortet die Hälfte meiner Frage.

              gruß,
              wahsaga

              --
              /voodoo.css:
              #GeorgeWBush { position:absolute; bottom:-6ft; }
              1. Hi nochmal,

                also die Fehlerseite ist zu erreichen über http://mein-server.de/fehler.de.

                Das stimmt natürlich ich, sondern
                http://mein-server.de/fehler.php

                LG Nina