Auto mapping development sites in Apache
Setting up a new virtual host entry in the Apache config files each time I setup a new development site on my local machine is a pain. Here’s how I am automatically mapping the
http://*.dev hostnames to
/home/user/dev/*/public in my home directory.
I normally have the files to be served by the webserver in a directory called
/public. This allows other files to be stored together and optionally committed to my git repositories, with clear separation between what should and should not be served on the web. I started this following the Ruby-on-Rails conversion, but I am typically using this Apache setup for sites using PHP or static HTML (not for Rails apps).
This example is for Ubuntu Linux (14.10).
Create a new file called
dev.conf with the following content (e.g.
sudo vim /etc/apache2/sites-available/dev.conf):
# Set up permissions for VirtualHosts in /home/user/dev <Directory "/home/user/dev"> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> # Automatic VirtualHosts with .dev # /home/user/dev/xxx/public can be accessed at http://xxx.dev <VirtualHost *:80> ServerName dev ServerAlias *.dev VirtualDocumentRoot /home/user/dev/%-2+/public </VirtualHost>
/home/user/dev/ to the location of the sites to be served. The
/public can also be removed if the files to be served are in the directory root, instead of the /public sub-directory.
Enable the Vhost Alias module in Apache:
sudo a2enmod vhost_alias sudo service apache2 restart
Enable the Apache dev site:
sudo a2ensite dev sudo service apache2 reload
Additionally, I am Dnsmasq to map all the
*.dev domains to my local IP address, as per Dnsmasq (no editing /etc/hosts).
Now test out that it’s working.
a2dissite enable and disable the sites and modules used by Apache by creating, or removing, the symbolic links between the files in the
*-enabled directories under
Here’s how to do something similar on Mac: Local Development Environment: Apache, PHP, and MySQL with Homebrew