There are several ways to set up virtual hosts on your web server. One of the more common methods is to manually create a [<VirtualHost>]( record for each virtual host. While using this method is fine, it can end you up with a huge configuration file that is difficult to manage.

Because all of my virtual hosts are sub-directories of my web server’s base directory, I prefer to dynamically allocate the virtual host directory based on the host name. For example, I want wildlyinaccurate.localhost to point to /var/www/wildlyinaccurate. This can be achieved by modifying the .htaccess file of your web server’s base directory:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^([^\.]+)\.localhost$
RewriteCond /var/www/%1 -d
RewriteRule ^(.*)$ %1/$1 [L]

Let me explain what this does:

RewriteCond %{HTTP_HOST} ^([^\.]+)\.localhost$ looks for something.localhost and captures the first part of the host name.

RewriteCond /var/www/%1 -d makes sure that the captured string (e.g. something) exists and is a sub-directory of /var/www/

RewriteRule ^(.*)$ %1/$1 simply rewrites any of our *.localhost requests to the sub-directory (e.g. /var/www/something).

So there you have it! A simple way to configure dynamic virtual hosts – as long as they are sub-directories of your web server root! Note that this guide doesn’t cover how to make *.localhost point to your web server. To do this you either need to manually add the host name into your hosts file (/etc/hosts on Linux; C:\WINDOWS\system32\drivers\etc\hosts on windows) or set up your own DNS server.