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>
Change /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.
Other information
The commands a2enmod
, a2dismod
, a2ensite
, and a2dissite
enable and disable the sites and modules used by Apache by creating, or removing, the symbolic links between the files in the *-available
and *-enabled
directories under /etc/apache2/
.
Alternative instructions
Here’s how to do something similar on Mac: Local Development Environment: Apache, PHP, and MySQL with Homebrew