Tipps & Tricks

Hilfestellungen rund um die Themen Internet & Programmierung

WAMP-Tutorial, Teil 9, Ergänzungen: Apache Virtual Hosts einrichten

Vor einiger Zeit sollte ich einige Änderungen an einer nicht von mir selbst programmierten Webseite vornehmen, die bereits seit einiger Zeit online war. Nach dem Herunterladen der Dateien öffnete ich die Site wie gewöhnlich über die 127.0.0.1-Adresse meines WAMPs und bekam ein völlig durcheinander gewirbeltes Layout ohne Grafiken und voller PHP-Fehlermeldungen zu Gesicht.

Ein Blick in den Quelltext offenbarte das Problem: der Programmierer hatte sämtliche Pfade zu Bildern, Stylesheets, Includes usw. nach folgendem Muster aufgebaut:

<img src="<?php echo $_SERVER['DOCUMENT_ROOT']; ?>/images/image.jpg">

Somit bezogen sich alle Pfade auf das Root-Verzeichnis des Webservers. Online wurde das von PHP so übersetzt:

<img src="http://www.kundendomain.de/images/image.jpg">

Offline erhielt ich dagegen folgenden Pfad relativ zu meinem htdocs-Ordner, der ja, wie in der Installationsanleitung beschrieben, mein Root-Verzeichnis bildet:

<img src="C:/WAMP/Apache2.2/htdocs/images/image.jpg">

Die Struktur der Webseite befindet sich allerdings nach meinem Ablagesystem unter dem Pfad "C:/WAMP/Apache2.2/htdocs/kundendomain.de/website/". Der richtige Pfad zum Bild wäre also:

<img src="C:/WAMP/Apache2.2/htdocs/kundendomain.de/website/images/image.jpg">

Was tun, wenn sich die Pfade online und offline unterscheiden?

Zu diesem Zweck kommen sogenannte "Virtuelle Hosts" wie gerufen. Man legt "Virtuelle Hosts" im Apache Webserver an und kann damit z.B. erreichen, dass verschiedene Domains auf eine Maschine mit einer einzigen Webserver-Installation konnektiert sind, aber jede Domain auf einen separaten Ordner zeigt. Zusätzlich können so für jede konnektierte Domain separate Einstellungen angelegt werden. Auf diese Weise werden z.B. viele Shared-Hosting-Server betrieben.

Öffnen Sie zunächst Ihre Apache-Konfigurationsdatei "httpd.conf" und scrollen Sie nach unten durch, bis Sie zum folgenden Block gelangen:

# Virtual hosts
# Include conf/extra/httpd-vhosts.conf

Entfernen Sie die Kommentar-Raute vor der zweiten Zeile. Öffnen Sie nun die in dieser Zeile angebene Datei, die sich unterhalb Ihres Apache2.2-Ordners befindet. Dort finden Sie zwei Blöcke, die jeweils mit der folgende Zeile beginnen:

<VirtualHost *:80>

Den ersten dieser Blöcke editieren Sie wie folgt (natürlich unter Berücksichtigung der bei Ihnen verwendeten Pfade):

<VirtualHost *:80>
   ServerAdmin admin@localhost
   DocumentRoot C:/WAMP/Apache2.2/htdocs/
   ServerName localhost
   ServerAlias 127.0.0.1
   ErrorLog C:/WAMP/Apache2.2/logs/error_log
   CustomLog C:/WAMP/Apache2.2/logs/access_log common
</VirtualHost>

Der Webserver weiß nun, dass er alle Anfragen, die er erhält, die nicht einem bestimmten Virtual Host zugeordnet sind, aus dem gewohnten htdocs-Verzeichnis beantworten soll. Nun legen Sie Ihren ersten Virtual Host an:

<VirtualHost *:80>
   ServerAdmin admin@localhost
   DocumentRoot C:/WAMP/Apache2.2/htdocs/kundendomain.de/website/
   ServerName www.kundendomain.local
   ServerAlias 127.0.0.1
   ErrorLog C:/WAMP/Apache2.2/logs/error_log
   CustomLog C:/WAMP/Apache2.2/logs/access_log common
</VirtualHost>

Hiermit sagen Sie dem Apache in Klartext übersetzt, dass auf dem Rechner 127.0.0.1 (also auf dem lokalen Rechner) Anfragen nach der URL www.kundendomain.local eingehen können. Wenn das passiert, soll er im Verzeichnis C:/WAMP/Apache2.2/htdocs/kundendomain.de/website/ nachsehen und entsprechende Antworten liefern. Die Protokoll-Dateien lasse ich im gesamten Log-File, sie können aber ein eigenes Verzeichnis dafür angeben.

Windows XP für Virtuelle Hosts konfigurieren

Jetzt muss das Betriebssystem noch wissen, wo es nachsehen muss, wenn Sie www.kundendomain.local z.B. in einem Browser eingeben. Unter Windows XP öffnen Sie dazu die Datei "hosts" im Ordner "Windows/System32/drivers/etc/" mit einem Texteditor. Sie sollten dort bereits einen Eintrag finden, der der Namensadresse "localhost" die IP-Adresse 127.0.0.1 zuweist. Fügen Sie eine neue Zeile hinzu:

127.0.0.1            www.kundendomain.local

Speichern Sie die Datei und starten Sie den Apache neu. Öffnen Sie anschließend einen Browser und tippen Sie www.kundendomain.local ein, sie landen sofort im angegebenen Ordner.

Sie können nun beliebig viele Virtual Hosts anlegen. Bedenken Sie dabei, dass der Name, den Sie in der httpd-vhosts.conf als "ServerName" angeben, identisch mit dem Namen in der hosts-Datei sein muss.

Bedenken Sie auch, dass ich die erfundene TLD ".local" absichtlich verwende, da sie im Internet nicht existiert. Falls Sie einen Virtual Host mit einer real existierenden Domain benennen, werden Sie (bei eingeschaltetem Webserver) nicht mehr in der Lage sein, die online existierende Webseite unter dieser Domain anzusurfen. Sie werden stattdessen immer bei Ihren Offline-Dateien landen.

Selbstverständlich können Sie statt "kundendomain.local" jede andere Bezeichnung verwenden. Und Sie können Ihre Offline-Dateien weiterhin wie gewohnt über http://127.0.0.1/kundendomain.de/website/ ansteuern.

Durch das Anlegen des Virtual Hosts und die Zuweisung eines eigenen Document-Root-Pfades sieht der Pfad zu den Bildern offline jetzt richtig aus, wenn ich die Seite über www.kundendomain.local aufrufe:

<img src="C:/WAMP/Apache2.2/htdocs/kundendomain.de/website/images/image.jpg">


[nach oben]