A Catch-all Dynamic VirtualHosts for All Your Dev Sites
I like to keep all of the sites I'm working on in
~/Sites/, each in a folder named after the git repo they come from. I used to have a helper bash script which would allow me to append a new entry to my httpd-vhosts.conf file every time I added a new repository. Instead, we can set up a wildcard so we don't even have to do that.
With this file, typing foo.dev in your browser should give you the index inside
/home/username/Sites/foo/public_html for example. Remember that you will still need to either set up a simple dns server like dnsmasq (wildcard dns + wildcard vhost! amazing!) or add each hostname to your hosts file in order to reach them.
# Catch all requests. NameVirtualHost * # Enable wildcard catching of domain # names by vhost directive. UseCanonicalName Off <VirtualHost *> # Catch only requests to .dev domains. ServerName dev ServerAlias *.dev # Log everything so its sortable # by domain name. # LogLevel debug LogFormat "%V %h %t \"%r\" %s %b" vcommon CustomLog /$HOMEDIR/$USER/Sites/.log/access_log vcommon ErrorLog /$HOMEDIR/$USER/Sites/.log/error_log # Use the first part of the domain name # as folder name to look in. VirtualDocumentRoot /$HOMEDIR/$USER/Sites/%1/public_html # Make php set the DOCUMENT_ROOT correctly # since apache doesn't set it correctly to the # virtual one. # # See http://jbenner.net/blog/quick-tip-get-proper-document-root-when-using-mod-vhost-alias php_admin_value auto_prepend_file /$HOMEDIR/$USER/Sites/.conf/setdocroot.php </VirtualHost>
Make sure modvhostalias is enabled in your apache installation (default on Mac's apache) and substitute $HOMEDIR and $USER with the approriate strings for your user and unix platform (e.g.
/home/dan/ on linux and
/Users/Dan/ on osx). The bit about php autoprependfile is explained in the link (along with the referenced file's contents), but is essentially just setting php's
You can add a second entry that catches ServerName/Alias .static that will work with sites that don't have anything above document root (e.g.