2010-12-02 15 views
9

Hier ist der relevante Teil der .htaccess-Datei:Benutzerdefinierte Fehlerseite in Apache2 für 401

AuthUserFile /var/www/mywebsite/.htpasswd 
AuthGroupFile /dev/null 
AuthName protected 
AuthType Basic 
Require valid-user 

ErrorDocument 400 /var/www/errors/index.html 
ErrorDocument 401 /var/www/errors/index.html 
ErrorDocument 403 /var/www/errors/index.html 
ErrorDocument 404 /var/www/errors/index.html 
ErrorDocument 500 /var/www/errors/index.html 

Docuement root/var/www/mywebsite/web eingestellt ist, ist es auf vielen vhosts ist. Ich kann zur Seite index.html navigieren.

Alles, was ich sehe, ist die generische Apache 401 Seite, irgendwelche Gedanken.

EDIT: Dies ist die Fehlermeldung in meinem Browser:

Authorization Required

This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.

Additionally, a 401 Authorization Required error was encountered while trying to use an ErrorDocument to handle the request. Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny8 with Suhosin-Patch Server at www.dirbe.com Port 80

Antwort

7

Stellen Sie sicher, dass/var/www/Fehler durch den Apache-Benutzer und nimmt diese in Ihrer Apache-Konfiguration lesbar ist:

<Directory /var/www/errors> 
    Order allow,deny 
    Allow from all 
</Directory> 
+1

Kein Glück. Und nichts in den Fehlerprotokollen. Ich sehe dies jedoch auf der Fehlerseite: "Außerdem wurde beim Versuch, ein ErrorDocument zu verwenden, um die Anfrage zu bearbeiten, ein 401 Authorization Required Fehler aufgetreten." –

+0

Versuchen Sie, Ihre Require-Auth-Zeilen innerhalb eines Abschnitts zu setzen. –

+0

danke für den Hinweis, aber ohne Erfolg. Fehler:

3

Diese Frage (und Antworten und Kommentare) hat mir sehr geholfen, vielen Dank!

Ich löste einen etwas anderen Weg, und wollte teilen. In diesem Fall mussten wir ein benutzerdefiniertes 401-Fehlerdokument bereitstellen und den Stammpfad angeben, der für eine Back-End-App verwendet werden muss.

So, zum Beispiel http://example.com benötigt, um Inhalt von http://internal-server:8080/ zu dienen. Außerdem muss http://example.com mit Basic Auth mit einem benutzerdefinierten 401-Fehlerdokument geschützt werden.

Also, ich habe ein Verzeichnis mit dem Namen "Fehler" in der DocumentRoot erstellt. Hier sind die relevanten Zeilen vom vhost:

ErrorDocument 401 /error/error401.html 

    # Grant access to html files under /error 
<Location "/error"> 
Options -Indexes 
Order Deny,Allow 
Allow from all 
</Location> 

    # restrict proxy using basic auth 
<Proxy *> 
Require valid-user 
AuthType basic 
AuthName "Basic Auth" 
AuthUserFile /etc/apache2/.htpasswd 
</Proxy> 

    # Proxy everything except for /error 
ProxyRequests Off 
ProxyPass /error ! 
ProxyPass/http://internal:8080/ 
ProxyPassReverse/http://internal:8080/ 
+0

Ich habe das versucht, aber ich bekomme die Fehlerseite bevor ich mich anmelde Irgendwelche Ideen? – user2643679

0

ErrorDocument verwendet einen absoluten URL-Pfad anstelle eines Dateipfads. So sollte es sein:

ErrorDocument 404 /error/error.html 

Angenommen unter Ihrem Dokument root ist eine /error/error.html Datei.

Verwandte Themen