https und www erzwingen (Apache 2.4)

März 28, 2017 - Lesezeit: 2 Minuten

Hat man für eine Webseite SSL (https) eingerichtet kann man den Benutzer automatisch dazu zwingen die Seite nur noch verschlüsselt aufzurufen. Verwendet man als Webserver Apache geht dies wie folgt: Im Netz finden sich viele Beispiele im Zusammenspiel mit mod_rewrite, allerdings empfehlen die Apache Entwickler diese Technik für diesen Fall nicht unbedingt (hier nachzulesen: http://httpd.apache.org/docs/2.4/rewrite/avoid.html). Stattdessen reicht in der Seitenkonfiguration ein einfaches:

<VirtualHost *:80>
...
Redirect / https://www.domain.de
...
</VirtualHost>

Wer es trotzdem mit mod_rewrite machen will oder muss, kann dazu folgende Zeilen verwenden, ebenfalls in der Config oder über eine .htaccess Datei:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://www.doamin.de%{REQUEST_URI} [R=301,L]

Soweit so gut, wer jetzt noch eine ordentliche URLmag und auch immer das www in der Adresszeile haben will, egal ob der Benutzer es eingibt oder nicht, der muss etwas tricksen. Zumindest habe ich keinen einfacheren Weg gefunden. Und zwar muss man seine SSL Config klonen, bzw. zwei Virtual Hosts für SSL einrichten. Der erste ist für die URL ohne www

<VirtualHost *:443>
    ServerName domain.de

    ....

    Redirect / https://www.domain.de

</VirtualHost>

Und der zweite dann für eure URL mit www.

<VirtualHost *:443>
    ServerName www.domain.de

    ....

</VirtualHost>

Was passiert? Alle https Anfragen ohne www werden dann umgeleitet auf mit www. Wichtig ist das beide Virtual Host Konfigurationen ansonsten identisch sind, also mit Directory und SSLEngine On etc.

Über mod_rewrite habe ich keinen Weg gefunden https ohne www auf https mit www umzuleiten. Hat bei mir alles mit der Kombination aus SSL erzwingen nicht funktioniert.