FreelancePHP

The thoughts, opinions and sometimes the rants of Mark Evans

MAMP and Dynamic Virtual Hosts

| Comments

I recently came across a blog post by David Coallier which detailed a cool way to deal with local development with Apache. You can read his blog post at Wildcard /etc/hosts, an alternative, this is something I have been after for a very long time so decided to try it for myself.

I don’t use homebrew but instead I use macports so here is how I managed to achieve the same thing.

First things first make sure you have Macports installed and working.

Then lets install dnsmasq using Macports so open up a terminal shell and type

sudo port install dnsmasq

This will download and install dnsmasq to /opt/local/sbin

Next up you need to edit the dnsmasq.conf file to setup your local DNS entries. To do this type

sudo vim /opt/local/etc/dnsmasq.conf

I then added the following 2 lines to the configuration file

address=/com.local/127.0.0.1 listen-address=127.0.0.1

After saving the file I then needed to make sure that dnsmasq was started automatically when my macbook was restarted. I did this by typing

sudo port load dnsmasq

Next up I needed to add the new DNS server to my network configuration so that it would be used when trying to resolve domain names. I did this by going to

System Preferences -> Network -> Selected My Network Interface -> Advanced -> DNS

By clicking the + symbol and adding 127.0.0.1 to the list of DNS servers I was now all set.

I tested this was working by going back to the terminal window and first off tried an external domain to make sure I hadn’t screwed my DNS up

ping google.com PING google.com (173.194.37.104): 56 data bytes

And then trying my new local addresses

ping mark.com.local PING mark.com.local (127.0.0.1): 56 data bytes

I was now all set. Next up to configure MAMP so that I didn’t need to setup a virtual host for every site I was working on.

I did this by editing /Applications/MAMP/conf/apache/httpd.conf and added the following lines to the end of the file

NameVirtualHost *:80 UseCanonicalName Off

LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon CustomLog logs/access_log vcommon

VirtualDocumentRoot /Applications/MAMP/htdocs/%1 VirtualScriptAlias /Applications/MAMP/cgi-bin

After a quick restart of MAMP I was now able to use any .com.local domain name and it would map correctly to a folder inside /Applications/MAMP/htdocs/

To test this I created a new folder inside /Applications/MAMP/htdocs/ called testsite

And added a simple index.php file which just did an echo “Hello World”

Then booting up a browser I went to http://testsite.com.local and voila I was treated to the simple words “Hello World”. My life was now complete, no more faffing around with vhosts and /etc/hosts!

Thanks to David for helping me realise just how easy it could be to set all this stuff up.

Comments