Apache: Virtual hosts with multiple locations with multiple document roots: is it possible?

Ok, so here's my problem: I've set up myself a virtualhost with an appropriate server name. I also have, for example, Squirrelmail and SVN installed on the same machine. I want to get to the default page by typing http :// mydomain , get to my mail frontend by typing http ://mydomain /mail and to my svn by typing http :// mydomain.no-ip.org /svn.

Heres my vhost definition:

<VirtualHost *:80>

ServerName mydomain.no-ip.org

#Default site, accessible by http :// mydomain.no-ip.org/
<Location />
    DocumentRoot "/var/www/alias"   
    DirectoryIndex index.php
</Location> 

#Squirrelmail, accessible by http :// mydomain.no-ip.org /mail  
<Location /mail>
    DocumentRoot /usr/share/squrrelmail     
    Options FollowSymLinks
    <IfModule mod_php5.c>
            php_flag register_globals off
    </IfModule>
    <IfModule mod_dir.c>
         DirectoryIndex index.php
    </IfModule>
    <Files configtest.php>
            order deny,allow
            deny from all
            allow from 127.0.0.1
    </Files>
</Location>

#SVN, accessible by http :// mydomain.no-ip.org /svn
<Location /svn>
    DAV svn
    SVNParentPath "/svnrepo"
    SVNListParentPath On
    AuthType Basic
    AuthName "My SVN Repo"
    AuthUserFile "/svnrepo/htpasswd"
    Require valid-user
</Location>

However, there's a problem with that one; when trying to restart apache, it says that you can't define a DocumentRoot within a Location. Therefore, there's something that I'm doing wrong, but I don't yet know what exactly.

When browsing serverfault to find if anybody had a similar problem, I've found a link to Apache's vhost examples: http://httpd.apache.org/docs/2.0/vhosts/examples.html , hovever, I can't figure out which example would be the best one there.

To be honest, neither am I versed in apache and it's ways, so I know what I've just written may be, to you, nonsensical at best.

So, anybody knows how to solve my problem, please? Any help would be greatly appreciated!


Solution 1:

Indeed, you cannot have another DocumentRoot; you'll want an Alias instead.

Drop the DocumentRoot from the <Location> block, and replace it with this (which must be outside the <Location> block):

Alias /mail /usr/share/squrrelmail

And let's apply those SquirrelMail settings to the directory instead of the location; just swap out the definitions at the top and bottom of the block:

<Directory /usr/share/squrrelmail>
    Options FollowSymLinks
    <IfModule mod_php5.c>
            php_flag register_globals off
    </IfModule>
    # etc
</Directory>

Also, it's unlikely that there's any permissions settings anywhere that apply to the SquirrelMail directory. You'll probably need this or similar in the <Directory /usr/share/squrrelmail> section:

Order Allow,Deny
Allow from all