Apache VirtualDocumentRoot for wildcard virtualhosts

Posted: January 27th, 2012 | Author: | 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