Nach der Umstellung auf SSL/TLS (siehe “Echtes SSL bei all-inkl aktivieren” und “Wordpress auf SSL umstellen”) musste ich leider feststellen, dass bei der automatischen Weiterleitung auf SSL wieder eine doppelte Abfrage der Credentials erfolgt. Einmal beim Zugriffsversuch auf die unverschlüsselte Seite und das zweite mal nach der Weiterleitung auf SSL/TLS. Der Trick mit der Auswertung HTTP-Header X-Forwarded-Host funktioniert dabei nicht mehr, wenn der Zugriff nicht mehr per SSL/TLS-Proxy sondern direkt erfolgt.
Mit folgender Einstellungen habe ich die Basic-Authentisierung auf meinem Server so konfigurieren können, dass wieder nur beim Zugriff per HTTPS das Passwort eingegeben werden muss. Dazu habe ich in der .htaccess-Datei im Root-Verzeichnis der Worpress-Installation folgende Einträge vorgenommen:
SSLOptions +StrictRequire <FilesMatch "(?<!redirect\.php)$"> SSLRequireSSL ErrorDocument 403 /redirect.php </FilesMatch>
Die SSL-Option in der ersten Zeile stellt sicher, dass zusammen mit der Option SSLRequire oder SSLRequireSSL der Zugriff auch dann nur per SSL/TLS erlaubt ist, wenn in der .htaccess-Datei die Option Satisfy any gesetzt wird.
Der Abschnitt in den Zeilen 2-4 sorgt dann dafür, dass der Zugriff auf die Web-Seite nur noch per SSL/TLS möglich ist. Wird ein Zugriffsversuch ohne SSL/TLS gestartet, so wird dieser dank der Option SSLRequireSSL mit einem HTTP-Fehler 403 (Forbidden) quittiert. Dank der Definition in Zeile 4 führt das dazu, dass die Datei /redirect.php vom Web-Server ausgeliefert wird.
Es bleibt noch anzumerken, dass auf die Datei /redirect.php dank der FilesMatch-Direktive aus Zeile 2 auch unverschlüsselt aufgerufen werden darf.
In der Datei /redirect.php wird mit dem folgenden PHP-Code die eigentliche Weiterleitung auf https realisiert:
<?php header("HTTP/1.1 301 Moved Permanently"); header("Location: https://" . $_SERVER['HTTP_HOST'] . $_SERVER["REQUEST_URI"]); header("Connection: close"); //phpinfo(); ?>
Wichtig ist hierbei, dass mit einem Status-Code 301 geantwortet wird (siehe Zeile 2), damit das bisherige Page-Ranking mit übernommen wird. In der dritten Zeile wird dann die Ziel URL-festgelegt. Somit ist eine Weiterleitung auf HTTPS sichergestellt.
Danach kann die Basic-Authentisierung aktiviert werden. Der Zugriff auf die Datei /redirect.php darf dabei natürlich nicht eingeschränkt werden. Für meine WordPress-Installation habe ich folgende Einträge in unterschiedlichen .htaccess-Dateien vorgenommen:
<FilesMatch "(wp-config|wp-login)(.*)"> AuthUserFile /path/to/.htpasswd AuthGroupFile /path/to/.htgroup AuthName "Backend" AuthType Basic Require valid user Order deny,allow </FilesMatch>
AuthUserFile /path/to/.htpasswd AuthGroupFile /path/to/.htgroup AuthName "Backend" AuthType Basic Require valid user Order deny,allow satisfy any <FilesMatch "\.(ico|pdf|flv|jpg|jpeg|mp3|mpg|mp4|mov|wav|wmv|png|gif|swf|css|js)$"> Allow from All </FilesMatch> <FilesMatch "(async-upload|admin-ajax)\.php$"> <IfModule mod_security.c> SecFilterEngine Off </IfModule> Allow from All </FilesMatch>