401-Dokument wird nicht angezeigt (.htaccess)
Jakob Schneider
- webserver
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
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
Hi,
danke erstmal für den Link...
Bist du dir sicher, dass 301 zurückgegeben wird (im Titel steht 401)?
LG Jakob
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
Hi,
er gibt "HTTP/1.1 401 Authorization Required" zurück...
LG Jakob
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
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
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).
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
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
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
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
Moin,
Also erstmal danke, mein Problem ist ja gelöst :-)
Desweiteren habe ich die Pfadangaben umgestellt (/error.php... nicht mehr http://...).
LG Jakob