Apache VirtualDocumentRoot for wildcard virtualhosts
Posted: January 27th, 2012 | Author: Vincent | Filed under: Development | No Comments »
<VirtualHost *:80>
UseCanonicalName Off
VirtualDocumentRoot /mnt/projects/%1/public
ServerName subdomains.starfall.local
ServerAlias *.starfall.local
</VirtualHost>
<Directory /mnt/projects/*/public>
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Now you might run into infinite redirect issue if use together with mod_rewrite. Add this line in the mod_rewrite .htaccess file for each folder under /mnt/projects to stop this.
RewriteBase /
Update:
The similar effect can be achieved via mod_rewrite. Put this into /etc/apache2/httpd.conf, or apache2.conf but it needs to be loaded first before virtualhost/conf.d. The point here is to let virtualhost config to override this wildcard.
<VirtualHost *:80>
UseCanonicalName Off
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/icons/
RewriteCond %{HTTP_HOST} ^(.*)\.starfall.local$
RewriteRule ^/(.*)$ /mnt/projects/%1/public/$1
</VirtualHost>
You may still need to add “RewriteBase /” in case of infinite redirect.
From what I tested this new method handles:
- allow wildcard request to point to /mnt/projects/SUBDOMAIN_NAME/public
- it doesn’t not interfere with subsequent rewrite rule usually present in .htaccess
Leave a Reply