Umleitung auf einen anderen DNS-Namen und erzwingen von HTTPS innerhalb eines VirtualHosts

Wenn man eine Webseite mit mehreren DNS-Namen betreibt, möchte man meistens nur ein SSL-Zertifikat für diese erwerben. Eine solche Webseite wird bei einem Apache Webserver zudem meistens innerhalb eines VirtualHost konfiguriert. Daraus ergibt sich somit die Anforderung, innerhalb eines VirtualHost bei einem Apache Webserver gleich zwei Weiterleitungen zu konfigurieren.

  1. Eine Weiterleitung von http://<hostname1>.<domain>.de auf http://<hostname2>.<domain>.de
  2. Eine Weiterleitung von  http://<hostname2>.<domain>.de auf https://<hostname2>.<domain>.de

Damit der Browser keine Warnmeldung ausgibt, muss dass Zertifikat für den richtigen DNS-Namen ausgestellt sein. Deshalb ist es sehr wichtig, dass die Weiterleitungen nicht gleichzeitig sondern nacheinander ausgeführt werden. Beim ersten Aufruf der Seite muss nur auf den zweiten DNS-Namen umgeleitet werden. Beim zweiten Aufruf der Seite (der dann ja schon über den zweiten DNS-Namen erfolgt) muss dann von HTTP auf HTTPS umgeleitet werden.

Die serverseitige Umleitung von einer URL auf die andere Erfolg bei Apache üblicherweise über das Modul mod_rewrite. Bevor man dieses verwendet, muss es aktiviert werden. Dies geschieht bei Debien oder Ubuntu mit den folgendem Befehl.

a2enmod rewrite

Danach muss der Apache neu gestartet werden, damit das Modul geladen wird. Dies erledigt man bei einem neueren Ubuntu z.B. mit dem folgenden Befehl.

service apache2 restart

Die Regel für eine Weiterleitung besitzt bei Apache sogenannte Flags. Diese legen die genaue Funktionsweise der Weiterleitung fest. Um eine Weiterleitung durch Ersetzen zu erreichen wird das Flag R benötigt. Das Flag R steht für Replace und bedeutet, dass Teile der URL durch etwas anderes ersetzt werden. Wenn die Weiterleitung zudem dauerhaft sein soll, ist bei dem Flag R zudem ein Grund 301 hilfreich. Dieser Grund signalisiert, dass die Weiterleitung dauerhaft sein soll. Das Flag wird dann als „R=301“ geschrieben.

Obwohl die Konfiguration für beide Weiterleitungen in der Konfiguration von demselben VirtualHost steht, darf nur eine zur Zeit ausgeführt werden. Dies wird durch das Flag L erreicht. Dieses Flag steht für Last und bedeutet, dass beim Greifen der Rewrite-Regel keine weitere Rewrite-Regel ausgeführt wird. Es wird also immer nur eine Regel pro Aufruf ausgeführt.

Zudem ist wichtig, dass als erstes die Regel für die Weiterleitung auf den ersten DNS-Namen kommt. Erst danach darf die Regel für die Weiterleitung auf HTTPS kommen.

Wenn man all diese Bedingungen beachtet, sollten Rewrite-Regeln wie folgt aussehen.

RewriteEngine on
RewriteCond %{HTTP_HOST}   ^hostname1\.domain\.de$ [NC]
RewriteRule   ^/(.*)$ http://hostname2.domain.de/$1  [R=301,L]
 
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Weitere Informationen zum mod_rewrite gibt es auf den entsprechenden Webseiten beim Apache-Projekt unter http://httpd.apache.org/docs/current/mod/mod_rewrite.html oder https://httpd.apache.org/docs/current/rewrite/flags.html zu finden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*