
In einem Apache 2 vhost habe ich die folgende Konfiguration (in meinem Fall im .htaccess
Document Root (der der Einfachheit halber für http:80 und https:443 gleich ist))
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
um alle http-Verbindungen auf https umzuleiten.
ErrorDocument 500 /error.php
ErrorDocument 404 /error.php
ErrorDocument 403 /error.php
ErrorDocument 402 /error.php
ErrorDocument 401 /error.php
um benutzerdefinierte Fehlermeldungen zu erzeugen. Die dritte Zutat ist ein geschützter Unterordner mit erforderlicher Authentifizierung (per .htaccess
in diesem Ordner):
AuthType Basic
AuthName "Test"
AuthUserFile /some/path/to/passwords
Require user joe
Alles funktioniert einwandfrei, außer wenn jemand versucht, abzurufen. http://example.com/protectedfolder
Tatsächlich passiert Folgendes: Der Client erhält eine 302 Found
Antwort mit Umleitung zuhttps://example.com/error.php
Andererseits,
https://example.com/protectedfolder
401
führt wie erwartet zu einer benutzerdefinierten (d. h. von error.php erzeugten) Nachricht .http://example.com/publicfolder
führt zur302
Umleitung zuhttps://example.com/publicfolder
, dann zu einer301
permanenten Umleitung zuhttps://example.com/publicfolder/
und schließlich (da DirectoryIndex deaktiviert ist) zu einem benutzerdefinierten403
Fehler. Wie erwartet.- Außerdem
http://example.com/nonexistent
bewirkt es wie erwartet ein302
zuhttps://example.com/nonexistent
und dann ein angepasstes .404
- Deaktiviere ich die Konfiguration, erfolgt
ErrorDocument 401
eine Abfrage sofort, also ohne Weiterleitung auf https.http://example.com/protectedfolder
401
Es gibt keinen spezifischen Eintrag im Apache error.log, aber es scheint, dass das Problem auftritt, weil die Auth-Anforderung vor dem Rewrite ausgewertet wird und somit das ErrorDocument aufruft und das fälschlicherweise immer noch http ist??
Was muss ich ändern, um den gewünschten Effekt zu erzielen, d. h., dass
http://example.com/protectedfolder
eine Weiterleitung zu erfolgthttps://example.com/protectedfolder
und nur diese umgeleitete URL eine (angepasste) bewirkt401
?
Antwort1
http
Da Sie unbedingt von nach umleiten https
(eine schlechte Idee, wenn Sie möchten, dass jeder auf die öffentlichen Informationen auf Ihrer Website zugreifen kann, übrigens), dann sollten Sie einfach separate Host-Einträge für :80
und erstellen :443
und den :80
Eintrag auf etwas wie einen leeren Ordner richten – dann würde mod_auth nicht mit mod_rewrite konkurrieren.