Von HTTP auf HTTPS via Apache mittels .htaccess oder nginx-Webserver-Konfiguration weiterleiten

Eine verschlüsselte Verbindung über SSL (bzw. TLS) ist immer eine gute Idee um sensible Daten gegen Dritte zu schützen. Aber was bringt es wenn das SSL-Zertifikat im Webhosting-Paket installiert und die Verschlüsselung aktiviert ist, aber die Webseite trotzdem noch per HTTP erreichbar ist? Sämtlicher Verkehr über HTTP muss auf die HTTPS-Verbindung weitergeleitet werden.

Voraussetzung: Die Apache-Erweiterung mod_rewrite ist aktiviert und Webserver bereits via HTTP und HTTPS erreichbar. Beim Webserver nginx muss nur die Konfiguration veränderbar sein.

HTTP auf HTTPS weiterleiten via .htaccess

Die .htaccess-Datei liegt in der Regel im root-Verzeichnis der Webseite. In dieser Konfiguration werden sämtliche Verbindungen, die per HTTP auf den Server kommen, auf HTTPS weitergeleitet. Für den Endnutzer bleibt dieser Vorgang weitestgehend unsichtbar.

RewriteEngine On<br>
RewriteCond %{SERVER_PORT} !^443$<br>
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]<br>

Zunächst (Zeile 1) wird mod_rewrite aktiviert (das ist nicht erforderlich, wenn ohnehin schon getan). In Zeile 2 wird überprüft (in der Rewirte Condition) ob die Anfrage an den Server über den Port 443 (also den Standard-Port von HTTPS) kam. Wenn dies nicht der Fall ist, führt er die Regel aus Zeile 3 aus. Diese leitet sämtliche Anfragen via Statuscode 301 (permanent redirect) auf HTTPS um.

Das ist eine von verschiedenen Möglichkeiten um die Weiterleitung von HTTP auf HTTPS zu realisieren, eine andere Möglichkeit ist:

RewriteEngine On<br>
RewriteCond %{HTTPS} off<br>
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]<br>

Das Ergebnis ist das gleiche, nur der Weg ist ein minimal anderer: Es wird explizit geprüft ob eine HTTPS-Verbindung genutzt wird, ist dies nicht der Fall, so wird weitergeleitet.

HTTP auf HTTPS durch nginx-Konfiguration

Nginx (gesprochen „engine x“) ist ein alternativer Webserver, der im Vergleich zum Marktführer Apache in der Regel schneller ist. Daher hier noch die Konfiguration, wie das gleiche über die Konfiguration des nginx-Server (bzw. im Plesk-Konfigurationsbereich) gelöst wurde:

if ($scheme !~* ^https ){<br>
    rewrite ^ https://www.coding-pioneers.com$request_uri? permanent;<br>
}<br>

Warum den Statuscode 301 und nicht 302?

Im Standard wird in der RewriteRule mit R (Redirect) die Weiterleitung spezifiziert. Diese liefert (wenn man keinen abweichenden Status angibt) den HTTP-Statuscode 302 (found), also eine temporäre Weiterleitung zurück. Es ist zu empfehlen den Statuscode 301 (permanent redirect) zu nutzen, um auch im Bereich SEO keine Nachteile zu erhalten.