Heute stand ich vor dem Problem, dass ich entweder für jedes “Projekt” eine eigene Subdomain einrichte oder alles in Unterordner in einem gemeinsamen Virtual Host verwalte. Sofort war klar das ich eigene Subdomains will. Folglich heisst das man muss für jedes Projekt einen Konfigurationeintrag erstellen. Oder vielleicht doch nicht?
Bevor ich dies tun wollte, machte ich mir die Arbeit einmal im Web zu suchen, wie man das vielleicht dynamisch erledigen kann und wurde fündig. Das Zauberwort ist mod_vhost_alias. Wenn man einen ServerAlias auf die Subdomains legt kann man diese Abfragen und damit arbeiten. Ich gehe davon aus, das man weiß wie Virtuelle Hosts erstellt werden, darum zeige ich nur die dynamische Konfiguration.
Als erstes überlegen wir uns, mit welcher Domain wir arbeiten werden, ich nehmen als Beispiel nun einfach dev.example.com und alles was darunter liegt.
ServerAlias *.dev.example.com
Hiermit fangen wir nun alles ab was unter der Subdomain läuft, also z.B. proj1.dev.example.com oder cms.dev.example.com und so weiter. Der nächste Schritt ist nun das DocumentRoot zu setzen. Hierfür verwenden wir nun die dynamische Variante VirtualDocumentRoot. Um das Ganze nun definieren zu können stehen einem Platzhalter bereit mit den Informationen des Domainnamens: Directory Name Interpolation. Ich nehme nun nur zwei Beispiele heraus: %0 enthält den gesamten Domainnamen und %-4 den Teil, mit dem ich das ganze weiterführe. Die Verzeichnisstruktur die wir jetzt aufbauen sieht so aus: /var/www/dev.example.com/<projekt>/htdocs. Somit benötigen wir den Subdomainteil zu Beginn und Ihr ratet schon richtig, es ist %-4. Das bedeutet so viel wie, der vierte Teil von hinten. Der Erste ist com, Zweiter example, Dritter dev und Vierter von hinten bleibt nur noch z.B. proj1.
VirtualDocumentRoot /var/www/dev.example.com/%-4/htdocs
Damit haben wir eigentlich schon die zwei, für uns interessanten, Direktiven kennen gelernt. Nun alles in Summe inklusive Verzeichnisrechte und gleich einen Schutz auf der gesamten Projektesubdomain.
<Directory “/var/www/dev.example.com”>
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from allAuthName “Projects”
AuthType Basic
AuthUserFile /var/www/dev.example.com/.htpasswd
AuthGroupFile /var/www/dev.example.com/.htgroups
Require group projects admin
</Directory><VirtualHost *:80>
ServerAdmin admin@example.com
ServerAlias *.dev.example.com
UseCanonicalName Off
VirtualDocumentRoot /var/www/dev.example.com/%-4/htdocs
ErrorLog /var/log/apache/dev-error.log
CustomLog /var/log/apache/dev-access.log combined
</VirtualHost>
Damit könnt Ihr nun soviel Projektordner anlegen wie Ihr wollt.
Hoffe damit vielleicht einigen helfen zu können, mir war das Ganze eine große Hilfe!