Immer wieder mal muss man, je nach Menge unterschiedler Webprojekte einen neuen Vhost beim Apache einhängen. Man muss seine hosts-Datei anpassen und dann mit Copy-Paste und allen damit verbundenen eventuellen Leichtsinnsfehlern den Apache Webserver bzw. den Vhost konfigurieren. Anschließend noch den Apachen neu starten.

Das ist irgendwann, v.a. wenn man eine recht einheitliche Projektordnerstruktur hat, etwas nervig, weil man da meistens das gleiche einstellt und die einzigen Unterschiede in den Pfaden bzw. der Domain sind.

Die Macher von Apache haben hier eine schöne Lösung entwickelt, wo man sich den Apache-Konfigurationsteil spart.

Das Ganze läuft mittels des Moduls mod_vhost_alias.

Die Einrichtung ist ziemlich trivial.

In der Datei …/apache/extra/httpd-vhost.conf (kann man auch direkt in der httpd.conf machen) trägt man folgendes ein:

UseCanonicalName Off
VirtualDocumentRoot /var/www/%0

Anschließend werden alle Anfragen auf lokal gemappte Domains so aufgelöst, dass die Seite im Unterordner mit dem Domainnamen gesucht wird, z.B. wird http://scandio.local auf /var/www/scandio.local gemappt.

Man kann das Ganze aber auch seinen speziellen Bedürfnissen anpassen.

NameVirtualHost *:80
UseCanonicalName Off
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
<VirtualHost *:80>
     ServerName default.local
     SetEnv APPLICATION_ENV development
     <Directory "/var/www">
          Options Indexes MultiViews FollowSymLinks
          AllowOverride All
          Order allow,deny
          Allow from all
     </Directory>
     VirtualDocumentRoot /var/www/%1/htdocs
     CustomLog logs/access_log.dynamics vcommon
</VirtualHost>
<VirtualHost *:80>
    ServerName super.local
    DocumentRoot "/home/myname/docs"
    ErrorLog "logs/super.local-error_log"
    CustomLog "logs/super.local-access_log" common
</VirtualHost>

Der Ordner wird nun beim dynamischen Vhost von http://scandio.local auf /var/www/scandio/htdocs gemappt. Der weitere Vhost läuft ganz normal weiter. Leider gibt es meines Wissens keine Möglichkeit eigene Logs für die dynamischen Vhosts anlegen zu lassen. Für lokale Entwicklung brauch ich das aber auch nicht wirklich (Die Anpassung des Patterns, siehe oben, reicht).

Es bietet sich an, den dynamischen Teil als erstes in die Datei zu schreiben, da der Apache, wenn er nichts findet per default immer den ersten Vhost verwendet.

Die Änderungen an der /etc/hosts bzw. dem Windowspendant darf man natürlich nicht vergessen.

Eine weitere Möglichkeit dynamischer mit Vhosts zu arbeiten, bietet mod_macro, was mir persönlich allerdings nicht so zugesagt hat (siehe Link).

Quellen und weitere Infos:

mod_vhost_alias:

mod_macro: