Systemfehler in Apache bei Kombination aus https-Umleitung plus Passwortanforderung plus Fehlerdokument

Systemfehler in Apache bei Kombination aus https-Umleitung plus Passwortanforderung plus Fehlerdokument

In einem Apache 2 vhost habe ich die folgende Konfiguration (in meinem Fall im .htaccessDocument 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 .htaccessin 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/protectedfolderTatsächlich passiert Folgendes: Der Client erhält eine 302 FoundAntwort mit Umleitung zuhttps://example.com/error.php

Andererseits,

  • https://example.com/protectedfolder401führt wie erwartet zu einer benutzerdefinierten (d. h. von error.php erzeugten) Nachricht .
  • http://example.com/publicfolderführt zur 302Umleitung zu https://example.com/publicfolder, dann zu einer 301permanenten Umleitung zu https://example.com/publicfolder/und schließlich (da DirectoryIndex deaktiviert ist) zu einem benutzerdefinierten 403Fehler. Wie erwartet.
  • Außerdem http://example.com/nonexistentbewirkt es wie erwartet ein 302zu https://example.com/nonexistentund dann ein angepasstes .404
  • Deaktiviere ich die Konfiguration, erfolgt ErrorDocument 401eine Abfrage sofort, also ohne Weiterleitung auf https.http://example.com/protectedfolder401

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/protectedfoldereine Weiterleitung zu erfolgt https://example.com/protectedfolderund nur diese umgeleitete URL eine (angepasste) bewirkt 401?

Antwort1

httpDa 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 :80und erstellen :443und den :80Eintrag auf etwas wie einen leeren Ordner richten – dann würde mod_auth nicht mit mod_rewrite konkurrieren.

verwandte Informationen