Im letzten Schritt hatte ich erfolgreich die lokale Domain gruniversal.mars für meine lokalen Entwicklungen eingerichtet. Nun möchte ich hierzu die Subdomain www.gruniversal.mars einrichten und Aufrufe von gruniversal.mars automatisch dorthin umleiten.

Die Einrichtung selbst ist vergleichbar zur Einrichtung der Domain. Zunächst wird die Subdomain in der hosts-Datei zusätzlich bekannt gemacht:

david@mars ~ $ sudo vim /etc/hosts
127.0.0.1        gruniversal.mars
127.0.0.1        www.gruniversal.mars

Danach folgt die Konfiguration im Webserver. Dabei muss man keinen neuen Virtual-Host anlegen, sondern kann den bestehenden um den neuen Servernamen ergänzen, indem man ihn als ServerAlias angibt.

david@mars ~ $ sudo vim /etc/apache2/sites-available/001-gruniversal.mars.conf
<VirtualHost *:80>
    ServerName gruniversal.mars
    ServerAlias www.gruniversal.mars
    DocumentRoot /home/david/workspace/websites/gruniversal.de/
</VirtualHost>

Nach einem entsprechenden Reload des Apache ist die Subdomain dann ebenfalls verfügbar. Damit ist der einfache Teil abgeschlossen.

Apache Rewrite-Engine aktivieren

Für die geplante Umleitung möchte ich die Funktionalität des Apache Modules mod_rewrite nutzen. Dafür muss das Modul erstmal aktiviert werden:

david@mars ~ $ sudo a2enmod rewrite

Aus Sicherheitsgründen ist die Verwendung von .htaccess-Dateien in meinem Linux deaktiviert, so dass es erforderlich ist, dies zunächst zu erlauben:

david@mars ~ $ sudo vim /etc/apache2/sites-available/001-gruniversal.mars.conf
<Directory /home/david/workspace/websites/gruniversal.de/>
    AllowOverride All
</Directory>

Damit ist es möglich unterhalb des genannten Verzeichnisses nun .htaccess-Dateien mit entsprechenden Direktiven für den Webserver anzulegen.

Hintergrund: .htaccess-Dateien werden oft genutzt, wenn man keinen direkten Zugriff auf die Webserver-Konfiguration hat. In vielen Anwendungen (z.B. auch WordPress) werden sie genutzt und teilweise auch automatisch erstellt.

Im konkreten Fall wollen wir nun die Rewrite-Direktiven nutzen um eine Umleitung auf die neue www-Subdomain zu erreichen:

david@mars ~ $ vim /home/david/workspace/websites/gruniversal.de/.htaccess
RewriteEngine On
RewriteCond %{HTTP_HOST} ^gruniversal\.mars$
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301]

Mit dieser Anweisung werden alle Zugriffe, die auf gruniversal.mars zeigen, entsprechend umgeleitet. Die Bedeutung der einzelnen Zeilen lässt sich am besten über die Apache Dokumentation für mod_rewrite nachlesen. Grob gesagt:

  • In der ersten Zeile wird die Rewrite-Engine aktiviert. Dies ist nur einmal zu Beginn der Umleitungsregeln erforderlich.
  • Die zweite Zeile formuliert über einen regulären Ausdruck eine Bedingung, die wahr ist, wenn der Hostname genau „gruniversal.mars“ ist.
  • Wenn dies der Fall ist, wird in der dritten Zeile der Request umgeleitet, wobei die vollständige URI erhalten bleibt.

Die Flags am Ende der Zeile drei geben zudem an, dass die Umleitung

  • NE – nicht escaped wird,
  • R=301 – mit Http-Statuscode 301 erfolgen soll (SEO-relevant) und
  • L – die letzte zu beachtende Regel ist.

Da diese Konfiguration dateibezogen eingelesen wird, muss der Apache hier nicht neu gestartet werden, damit die Direktiven wirksam werden. Das ist ganz praktisch, weil man so die Regeln schnell anpassen und prüfen kann.

Wenn alles geklappt hat, leitet der Webserver damit zum Beispiel Zugriffe auf

http://gruniversal.mars/hello_world.html

automatisch zu folgender URL um:

http://www.gruniversal.mars/hello_world.html

Aber was ist eigentlich mit Zugriffen per HTTPS? Dazu mehr im nächsten Teil.