I have the following in apache.conf on my development workstation (actually included from /etc/apache2/users/andrew.conf):

<Directory "/Users/andrew/Sites/">
  Options Indexes MultiViews
  AllowOverride All
  Order allow,deny
  Allow from all
</Directory>

<VirtualHost *:80>
  DocumentRoot /Users/andrew/Sites/mysite/public
  ServerName mysite.dev
</VirtualHost>

I'm relying on the default settings in my new install of Mac OS X Lion, and just adding the VirtualHost directive.

When I get http://localhost/~andrew/ It doesn't try to serve the standard Directory index, rather it tries to serve the VirtualHost instead. I would expect this to happen only when accessing it by the ServerName "mysite.dev".

If I remove the VirtualHost, it serves the Directory index correctly.

Any ideas why this might be happening?

Update: I found that if I move the VirtualHost directive from users/andrew.conf to extra/http-vhosts.conf, then it works properly. I suppose that answers my question, but I'm still not clear on the root cause:

## httpd.conf
Include /private/etc/apache2/extra/httpd-userdir.conf    
Include /private/etc/apache2/extra/httpd-vhosts.conf

## extra/http-userdir.conf
UserDir Sites
Include /private/etc/apache2/users/*.conf
<IfModule bonjour_module>
   RegisterUserSite customized-users
</IfModule>

## extra/httpd-vhosts.conf
NameVirtualHost *:80

The configuration looks like they should still load the same thing, so I don't see why it would make a difference whether my VirtualHost is defined in extra/httpd-vhosts.conf or in my own users/andrew.conf

Update 2: In the extra/httpd-vhosts.conf file, I had commented out the "example" VirtualHosts that point to non-existent DocumentRoots. By putting these examples back in, my regular Directories now work as expected without falling through into the first catch-all VirtualHost.

So, the real question is: why does the apache configuration need an invalid VirtualHost for this to work?

link|improve this question
2  
The very first virtual host definition will be served as catch all for unknown domain names. – LazyOne Aug 28 '11 at 16:36
Thanks for that hint: I had disabled the "example" VirtualHosts that were in there. By putting them back in, it works correctly! But why? Is it because the examples' DocumentRoot doesn't exist? (Why does the configuration need an invalid VirtualHost for regular directories to work?) – Andrew Vit Aug 28 '11 at 17:53
feedback

Know someone who can answer? Share a link to this question via email, Google+, Twitter, or Facebook.

Your Answer

 
or
required, but never shown

Browse other questions tagged or ask your own question.