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

apache-2.4mod-aliasmod-rewrite

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]

Best Answer

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>
Related Topic