The Apache module mod_vhost_alias and its VirtualDocumentRoot
directive can really be a great time saver for local development (some
googling will explain why in more deapth). Basically, my local dev is
set up so that I just have to create a directory in my aliases
directory, and I just then navigate my browser to a URL matching the
name of that new directory, and apache knows exactly what to serve
automagically.
However, there are a few evil gotchas when using mod_vhost_alias, one
of which is that the PHP global $_SERVER['DOCUMENT_ROOT'] remains set
to the apache default DOCUMENT_ROOT environment variable rather than
being re-assigned to the document root activated by the
VirtualDocumentRoot directive for the current URL. This can cause some
PHP applications (that are too trusting) to die for one reason or
another.
I found a great solution to this in the related apache bug report:
Simply add the following line to your apache configuration inside the
VirtualDocumentRoot vhost definition:
php_admin_value auto_prepend_file /path/setdocroot.php
Then, create the referenced PHP file, and put set this as its
contents:
<?php $_SERVER['DOCUMENT_ROOT'] = str_replace($_SERVER['SCRIPT_NAME'], '', $_SERVER['SCRIPT_FILENAME']); ?>
Now, every page load has this file executed, which properly sets
DOCUMENT_ROOT.