Wenn man unbedingt möchte, dass eine Website unter SSL angesprochen wird, gibt es folgende – in meinen Augen eleganteste – Lösung:
Kurz
- In den entsprechenden vHost- oder Ordner-Block (z.B. von
/srv/www/htdocs) einfügen (Rewrite Modul nicht vergessen):
RewriteEngine on
RewriteCond %{HTTPS} !^on$ [NC]
RewriteRule . https://%{HTTP_HOST}%{REQUEST_URI} [L]
Lang
Man kann mithilfe des Rewrite-Moduls vom Apache eine entsprechende Weiterleitung nach HTTPS erzwingen, sollte die Seite nur über HTTP angesprochen werden.
Ich gehe nun einfach davon aus, dass HTTPS samt Zertifikaten bereits läuft und auch bekannt ist, wie man das Rewrite-Modul bei seiner entsprechenden Distribution bzw. generell beim Apache, lädt.
- Zunächst die RewriteEngine aktivieren:
RewriteEngine on - Als Rewrite-Bedingung (Cond(ition)) ein nicht aktiviertes HTTPS auf der Verbindung:
RewriteCond %{HTTPS} !^on$ [NC]
DasNCgibt an, dass die Bedingung case-insensitive, also unabhängig von Groß- & Kleinschreibung ist. Somit greift sie auf jeden Fall. - Als eigentliche Rewrite-Regel (Rule) erfolgt ein erneuter Aufruf des selben Hostnamens samt URI – nur diesmal mit
https://davor:
RewriteRule . https://%{HTTP_HOST}%{REQUEST_URI} [L]
Am Beispielhttp://domain.tld/foo/bar.html:
%{HTTP_HOST} = domain.tld
%{REQUEST_URI} = /foo/bar.html
Das[L]gibt an, dass es sich hierbei um die letzteRewriteRulein der Liste handelt. Wichtig, falls Ihr später weitere hinzufügt. So werden Regeln und die o.g.RewriteCondnicht vermischt.
Diese drei Zeilen müssen in den jeweiligen Block des vHosts, wo die Regel greifen soll, bzw. in einen Ordner-Block (z.B. <Directory /srv/www/htdocs>) eingefügt werden. Wo sich welche Konfiguration befindet, ist von Distribution zu Distribution unterschiedlich. Eine Beschreibung für Debian- und SUSE-basierte Systeme folgt.