Jakob Schneider: 401-Dokument wird nicht angezeigt (.htaccess)

Hi,

meine .htaccess-Datei enthält unter anderem folgende Zeile:

ErrorDocument 401 http://www.aquariensite.de/error.php?error=401

Dieses Dokument wird nicht angezeigt, wenn der Statuscode 401 eintritt.

Die anderen Statuscodes leiten allerdings fehlerfrei auf die dafür vorgesehen Seiten um (alle in der selben .htaccess-Datei angebeben).

Liegt das vielleicht an der Serverkonfiguration des Providers?

LG Jakob

--
Wer andern eine Bratwurst brät, hat meist ein Bratwurstbratgerät!
  1. Hallo Jakob,

    ErrorDocument 401 http://www.aquariensite.de/error.php?error=401
    Dieses Dokument wird nicht angezeigt, wenn der Statuscode 401 eintritt.

    http://httpd.apache.org/docs/misc/FAQ.html#errordoc401

    Die anderen Statuscodes leiten allerdings fehlerfrei auf die dafür vorgesehen Seiten um (alle in der selben .htaccess-Datei angebeben).

    Nein, da wird überall der Statuscode 301 zurückgegeben. Fehlerseiten
    sollten nicht mit der kompletten URL (s.o.), sondern nur mit dem
    Pfad auf dem Server - /error.php?error=404 - angeben werden.

    Leider gibt es zahlreiche Dokumentation, die diesen Punkt falsch be-
    schreiben.

    ErrorDocument 404 http://domain.xy/error404.html ist wertlos.

    Viele Grüße,
    Stefan

    1. Hi,

      danke erstmal für den Link...

      Bist du dir sicher, dass 301 zurückgegeben wird (im Titel steht 401)?

      LG Jakob

      --
      Wer andern eine Bratwurst brät, hat meist ein Bratwurstbratgerät!
      1. Hallo Jakob,

        Bist du dir sicher, dass 301 zurückgegeben wird (im Titel steht 401)?

        Eher 302 als 301. Du kannst es ja ausprobieren: http://forum.de.selfhtml.org/cgi-bin/http_trace.pl

        Viele Grüße,
        Christian

        1. Hi,

          er gibt "HTTP/1.1 401 Authorization Required" zurück...

          LG Jakob

          --
          Wer andern eine Bratwurst brät, hat meist ein Bratwurstbratgerät!
          1. Hallo Jakob,

            er gibt "HTTP/1.1 401 Authorization Required" zurück...

            Bei der 401-Seite: klar. Das muss er ja auch. Deswegen funktioniert

            ErrorDocument 401 http://...

            nicht.

            Es ging beim 30x-Code aber um die anderen Fehlerseiten, die Du mit http://... angegeben hast: Dort wird mit Sicherheit 302 zurückgegeben, was IMHO auch nicht toll ist, es zerstört den Sinn von HTTP-Statuscodes. ErrorDocument sollte deshalb meiner Ansicht nach _immer_ relativ zum Documentroot angegeben werden - _nie_ als http://...

            Viele Grüße,
            Christian

            1. Hi,

              ich habe ja gar keine 3xx-Dokumente in der .htaccess-Datei angegeben (Stefan meinte bloß, dass der Server den Code zurückgeben müsste)...
              Oder habe ich jetzt etwas falsch verstanden?

              LG Jakob

              --
              Wer andern eine Bratwurst brät, hat meist ein Bratwurstbratgerät!
              1. Hallo,

                ich habe ja gar keine 3xx-Dokumente in der .htaccess-Datei angegeben (Stefan meinte bloß, dass der Server den Code zurückgeben müsste)...
                Oder habe ich jetzt etwas falsch verstanden?

                nimm mal z.Bsp. eine SSI-Datei und schreibe da folgende Zeile rein:

                <!--#echo var="REDIRECT_STATUS" -->

                Und jetzt probierst Du einfach mal

                ErrorDocument 404 /error.shtml

                und

                ErrorDocument 404 http://www.domain.xy/error.shtml

                Da wirst Du sehen, dass die zweite Variante Unfug ist, der Browser
                bekommt keinen 404. Wenn Du in die Datei irgendwas mit 404 per PHP
                reinschreibst (/error.php?error=404 <-!), dann steht es vielleicht
                auf der Fehlerseite, aber da könntest Du ja alles mögliche rein-
                schreiben. Lese einfach mit PHP den Fehlercode aus und dann wirst
                Du sehen, dass die Variante mit der kompletten URL wertlis ist.

                Viele Grüße,
                Stefan

                PS: Warum 401 nie den kompletten Pfad (mit Hostname) zulässt,
                    steht in dem von mir zuerst verlinkten Beitrag in der
                    Apache-FAQ (Sicherheitsgründe).

                1. Hallo Stefan,

                  PS: Warum 401 nie den kompletten Pfad (mit Hostname) zulässt,
                      steht in dem von mir zuerst verlinkten Beitrag in der
                      Apache-FAQ (Sicherheitsgründe).

                  Hmmm? Das hat weniger mit Sicherheitsgründen zu tun, als dass es anders einfach nicht funktionieren könnte.

                  Viele Grüße,
                  Christian

                  1. Hallo Christian,

                    PS: Warum 401 nie den kompletten Pfad (mit Hostname) zulässt,
                        steht in dem von mir zuerst verlinkten Beitrag in der
                        Apache-FAQ (Sicherheitsgründe).

                    Hmmm? Das hat weniger mit Sicherheitsgründen zu tun, als dass es anders einfach nicht funktionieren könnte.

                    dann formuliere ich es anders ... wenn jemand einen kompletten Pfad
                    bei einem ErrorDocument angibt, dann kann er zumindest dem Besucher
                    suggerieren, er hätte die Fehlerseite vor sich (so wie bei Dr. Web).
                    Diese "Täuschung" ist beim 401-Errordoc nicht möglich und dafür ist
                    eine mögliche Sicherheitslücke der Grund. Zumindest glaube ich mich
                    zu erinnern, dass Michael Schröpl sich mal diesbezüglich geäußert
                    hatte und ihm glaube ich da ;-)

                    Wieauchimmer, mit einem kompletten URL bekommt der Client nicht den
                    richtigen Fehlercode und genau darauf wird auch in Apache-Doku aus-
                    drücklich hingewiesen:

                    "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, even if the document ends up being on the same server. This has several implications, the most important being that the client will not receive the original error status code, but instead will receive a redirect status code. This in turn can confuse web robots and other clients which try to determine if a URL is valid using the status code. In addition, if you use a remote URL in an ErrorDocument 401, the client will not know to prompt the user for a password since it will not receive the 401 status code. Therefore, if you use an "ErrorDocument 401" directive then it must refer to a local document."

                    Sorry für das lange Quoting, aber vielleicht hilft es ja, dass
                    dieser Unfug endlich aufhört ;-)

                    Besonders ärgerlich ist auch, wenn man sich vertippt, dann einen
                    "angeblichen" 404 bekommt und den Tippfehler in der Adresszeile
                    nicht mehr sehen kann, weil da ja die URL der Fehlerseite steht.

                    Viele Grüße,
                    Stefan

                    1. Hi Stefan,

                      Diese "Täuschung" ist beim 401-Errordoc nicht möglich und dafür ist
                      eine mögliche Sicherheitslücke der Grund. Zumindest glaube ich mich
                      zu erinnern, dass Michael Schröpl sich mal diesbezüglich geäußert
                      hatte und ihm glaube ich da ;-)

                      also ich selbst kann mich an eine solche Aussage nicht wirklich erinnern (habe aber auch gerade keine Lust auf eine Archivsuche).

                      Ich denke, die Frage ist auch, was eine Weiterleitung einer 401-Seite auf einen HTTP-URL bringen soll.
                      Würde dieser URL auf einer anderen Domain liegen, also in einem anderen Realm, dann sendet der Browser (!) an diesen die angegebenen Credentials nicht mit (die gehen ja nur den Realm etwas an und sonst niemanden), also könnte ein 'fremder' 401-Handler beispielsweise gar nicht gezielt auf diese Credentials reagieren (diese in den URL hineinzucodieren und dann eine Weiterleitung zu machen, das kann's ja wohl auch nicht sein).

                      Vielleicht wäre es am sinnvollsten, wenn "ErrorDocument 401 http://(.*)" in der Apache-Konfiguration gleich einen Syntaxfehler generieren würde ... etwas, das semantisch keinen Sinn macht, syntaktisch dann doch zu erlauben, führt genau zu Fragen wie der vorliegenden.

                      Viele Grüße
                            Michael

                      --
                      T'Pol: I apologize if I acted inappropriately.
                      V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
                      (sh:| fo:} ch:] rl:( br:^ n4:( ie:% mo:) va:| de:/ zu:| fl:( ss:) ls:~ js:|)
                       => http://www.peter.in-berlin.de/projekte/selfcode/?code=sh%3A|+fo%3A}+ch%3A]+rl%3A(+br%3A^+n4%3A(+ie%3A%25+mo%3A)+va%3A|+de%3A%2F+zu%3A|+fl%3A(+ss%3A)+ls%3A~+js%3A|
                      Auch diese Signatur wird an korrekt konfigurierte Browser gzip-komprimiert übertragen.
              2. Hallo Jakob,

                ich habe ja gar keine 3xx-Dokumente in der .htaccess-Datei angegeben (Stefan meinte bloß, dass der Server den Code zurückgeben müsste)...
                Oder habe ich jetzt etwas falsch verstanden?

                Ja.

                Wenn Du

                ErrorDocument Code /fehler.html

                angibst, dann wird

                ----------------------------
                HTTP/1.1 Code Erklärung
                weitere Header

                inhalt von fehler.html
                ----------------------------

                zurückgegeben. Wenn Du

                ErrorDocument Code http://www.example.com/fehler.html

                angibst, dann wird (_außer_ für 401)

                ---------------------------
                HTTP/1.1 302 Moved Temporarily
                Location: http://www.example.com/fehler.html
                weitere Header
                ---------------------------

                zurückgegeben. Letzteres stellt einen normalen HTTP-Redirect dar.

                Bei 401 kann das aber nicht funktionieren, da 401 sich auf die Wirkung des Statuscodes verlässt. Deswegen ist

                ErrorDocument 401 http://...

                wirkungslos.

                Es ist meiner Ansicht nach auch sinnlos, bei einem anderen Fehler als 401 einen Redirect durchführen zu lassen, denn dann bräuchten wir keine HTTP-Statuscodes mehr.

                Viele Grüße,
                Christian

  2. Moin,

    Also erstmal danke, mein Problem ist ja gelöst :-)
    Desweiteren habe ich die Pfadangaben umgestellt (/error.php... nicht mehr http://...).

    LG Jakob

    --
    Wer andern eine Bratwurst brät, hat meist ein Bratwurstbratgerät!