(bissige?) Blogs eines Schweizers Blogs, die das Leben schreibt

19Jan/110

Howto: Apache2, VHost und Catch-All mit Redirect

Vorwort: Ich fragte mich wie ich, wie ich ein Sammel-VHost mache (in der Regel www.domain.tld), und alle Sub-Domains welche nicht existieren mittels redirect auf den Sammelhost umleite. Nach diverser Literatur versuche ich das ganze konzentriert hier aufzuschreiben, um später selber nachschauen zu können ;)

Die Anleitung ist für ein Unix/Linux System ausgelegt, sollte aber mit Pfadanpassungen theoretisch auch auf einem Windows System laufen.

Zuerst das benötigte minimale Vorwissen:

  1. Wie werden VHosts mit Apache2 erstellt und aktiviert
  2. Wie schalte ich Module in Apache

Diese Punkte werden hier nicht direkt behandelt, aber dafür ein paar wichtige Hintergrundinformationen genannt. Um das redirect anschliessend einschalten zu können, muss das Modul mod_rewrite geladen werden, was in der Regel schon gemacht ist.

1. VHost am richtigen Ort definieren

Ein wenig Theorie zu VHost und VHost-Files. Apache2 lädt die VHost-Definitionen in der Reihenfolge der Dateinamen unter /etc/apache2/sites-enabled/. Sortiert wird zuerst nach Zahlen 0-9 und anschliessend nach Buchstaben. Standardmässig gibt es eine Datei 000-default, welche zuerst geladen wird.

Wenn Apache keinen VHost zu einer Domain findet, wird die erste VHost-Konfiguration genommen, welche Apache in der Reihenfolge der geladenen Dateien findet. Um sicherzustellen dass die Catch-All Subdomain wirklich zuerst ist, empfiehlt es sich die Datei /etc/apache2/sites-enabled/000-default1 anzupassen, und den gewünschten VHost als aller erster VHost in der Datei einzurichten.

Bis jetzt würde eine fiktive Subdomain quer.domain.tld zwar den Inhalt von www.domain.tld zeigen, aber in der Adressliste würde nach wie vor quer.domain.tld darin stehen. Um dies zu ändern, geht es weiter mit Schritt 2.

2. rewrite-Regel erstellen

Anschliessend die ReWrite Regeln innerhalb der Subdomain erstellen:

ServerName www.domain.tld
 
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.domain\.tld$ [NC]
RewriteRule ^(/.*)$ http://www.domain.tld$1 [R=301,L]

Erklärung der Regel:

  1. RewriteEngine einschalten
  2. Bedingung: Wenn die aufgeruffene Adresse nicht www.domain.tld ist (gross-Kleinschreibung wird mittels [NC] ignoriert), dann
    1. Kopiere alles nach und inklusive dem ersten / in einen Zwischenspeicher ($1)2
    2. Erstelle eine neue URL mittels http://www.domain.tld$1
    3. Redirect zu der URL (Mittels [R=301])
    4. Definiere dies als die letzte Rewrite-Regel (Mittels [L])

Wer das ganze genauer haben will, kann unter der offiziellen Dokumentation3 nachschauen. Möglich sind so auch ein Redirect von einer http:// Seite zu einer https:// Seite.

  1. Ist Standardmässig ein Link auf /etc/apache2/sites-enabled/default
  2. http:// sowie https:// werden nicht mitgezählt, das erste / wäre nach der vollständigen Domainadresse
  3. http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
Diesen Beitrag drucken Diesen Beitrag drucken
Kommentare (0) Trackbacks (0)

Zu diesem Artikel wurden noch keine Kommentare geschrieben.


Leave a comment

(required)

Noch keine Trackbacks.