Andreas Korthaus: Problem mit .htaccess und Verzeichnisstruktur

Beitrag lesen

Hallo!

Und das mit Parametern klappt sonst immer.

Pass auf:

.htpasswd
doc-root/
    request.php
    error401.php => request.php
    geschuetztes_verz/
         .htaccess

ich will das bei Aufruf von "www.domain.de/geschuetztes_verz/" das normale basic-auth Fenster aufgeht, halt duch die .htaccess im Verzeichnis. Falls jetzt hier durch den Anwender abgebrochen wird, erzeugt der _Apache_ ja eine 401er Meldung. Mit ErrorDocument kann man der Fehlermeldung halt eine eigene Seite zuweisen, dei dann ausgegeben wird, anstelle von "geschuetztes_verz/". D.h. ich habe im Browser, in dessen Adressleiste tatsächlich "www.domain.de/geschuetztes_verz/" stehen, aber bekomme meine schöne Fehlermeldung, und das muß genau hier noch nichtmal eine PHP-Seite sein, mit einer .html geht es aber genauso wenig. Das ganze hat nichst mit PHP zu tun, geh einfach davon aus ich verwende nur html.

Parameter klappen aber nur, weil ein 302-Redirect erfolgt.

Wo erfolgt der? Der Witz ist ja, das das ganze so wie ich es mir überlegtr habe mit "symbolischen" Verzeichnissen klappt, mein provider hat das halt so eingerichtet(keine Ahnung wie das genau geht), dass bei Aufruf von errordocs/ in ein ganz anderes Verzeichnis außerhalb des document roots gelinkt wird. Dahin kann man nicht weiterleiten, da  ein HTTP-Request nunmal nur innerhalb des doc-root gutgehen kann. Der Browser denkt, er sei im geschützen Verzeichnis, bekommt aber eine individuelle Fehlermeldung, die halt in Wirklichkeit außerhalb des doc-root liegt. Und wenn ich mein PHP-Script in dieses Verzeichnis lege und in der .htaccess

Errordocument 401 errordocs/sript.php?error=401

angebe, dann funktiomiert e genau so wie ich will, es wird das besagte Script an der eigentlichen login-Adresse angezeigt, welches eine Fehlermeldung und was weiß ich enthält. Das doofe ist nur, das das ganze später auf einen anderen Server soll der das nicht eingerichtet hat, und wo ich hierfür keine Rechte bekomme.

Der *darf* aber bei 401 nicht erfolgen. Ergo musst Du den kompletten Pfad auf das Fehlerdokument angeben und kannst _keine_ Paramter übergeben.

Wieso funktioniert es dann? Außerdem habe ich innerhalb des PHP-Scriptes dann gar nicht die Möglichkeit zu prüfen wie die Datei heißt, denn in den Umgebungsvariablen steht tatsächlich das Login-Verzeichnis(www.domain.de/geschuetztes_verz/)! Das ist sehr nützlich für ganz spezielle, punktuelle und individuelle HTTP-Error-Logfiles.... Aber wie gesagt, darum geht es weniger.

Ach ja, Deine PHP-Datei muss auf jeden Fall noch den Header ("Status: 401 Authorization required"); mitschicken!
ich mache das ganz ohne PHP. Es ist eine "normale" basic-Authentification, nur die 401er Seite ist PHP, da die einige Aktionen ausführen soll(z.B. "meldung machen " per email...).

Schon klar - aber PHP sendet Standardmäßig den 200er - auch im Falle eines Fehlerdokuments.

PHP sendet gar nichts, das ganze wird vom Apachen angestoßen. Geh davon aus dass ich überhaupt kein PHP verwende nur .html.

Daher musst Du ihn "manuell" korrigieren.

Das gilt normalerwiese, wenn ich Fehlermeldungen mit PHP erzeuge, aber das mache ich hier nicht(ich wiederhole mich ;-)), der Fehler passiert bei der normalen basic http-authentification. Und da gibte s halt die tollen Errordirektiven die es einem ermöglichen individuell gestaltete Fehlerseiten zu laden, das ist es was ich möchte, und was nicht klappt.

Viele Grüße
Andreas