Serving multiple directories outside of web root from the same URL with Apache2

Is it possible to set up Apache to serve multiple directories from the same URL?

For example, given that I have images in two locations: /mnt/imagestore1, /mnt/imagestore2. I would like mysite.com/images/file.jpg to display images from either directory.

It does not seem to work with Aliases like so:

Alias /images /mnt/imagestore1
Alias /images /mnt/imagestore2

And using mod_rewrite with an .htaccess in the document root hasn't worked either, although my understanding of mod_rewrite may be off here:

RewriteCond /mnt/imagestore1/%{REQUEST_URI} -f
RewriteRule ^(.+) /mnt/imagestore1/$1 [L]
RewriteCond /mnt/imagestore2/%{REQUEST_URI} -f
RewriteRule ^(.+) /mnt/imagestore2/$1 [L]

Solution 1:

I've got this working through mod_rewrite. I updated the vhost configuration directly instead of using an .htaccess file. I believe it could work through the .htaccess but my rewrite rules were a bit off (note the missing /). It was also necessary to add the <Directory> declaration (to allow access) for the image directories.

The vhost looks as follows:

DocumentRoot /var/www/html
<Directory /var/www/html>
  Order allow,deny
  Allow from all
</Directory>

RewriteEngine on

RewriteCond "/mnt/imagestore1%{REQUEST_URI}" -f [OR]
RewriteCond "/mnt/imagestore1%{REQUEST_URI}" -d
RewriteRule ^/?(.*)$ /mnt/imagestore1/$1 [L]

RewriteCond "/mnt/imagestore2%{REQUEST_URI}" -f [OR]
RewriteCond "/mnt/imagestore2%{REQUEST_URI}" -d
RewriteRule ^/?(.*)$ /mnt/imagestore1/$1 [L]

<Directory /mnt/imagestore1>
  Order allow,deny
  Allow from all
</Directory>

<Directory /mnt/imagestore2>
  Order allow,deny
  Allow from all
</Directory>