是否可以设置 Apache 来从同一个 URL 提供多个目录服务?
例如,假设我在两个位置都有图像:/mnt/imagestore1、/mnt/imagestore2。我希望 mysite.com/images/file.jpg 显示任一目录中的图像。
它似乎不适用于别名,如下所示:
Alias /images /mnt/imagestore1
Alias /images /mnt/imagestore2
并且在文档根目录中使用带有 .htaccess 的 mod_rewrite 也不起作用,尽管我对 mod_rewrite 的理解可能在这里不正确:
RewriteCond /mnt/imagestore1/%{REQUEST_URI} -f
RewriteRule ^(.+) /mnt/imagestore1/$1 [L]
RewriteCond /mnt/imagestore2/%{REQUEST_URI} -f
RewriteRule ^(.+) /mnt/imagestore2/$1 [L]
答案1
我通过 mod_rewrite 实现了这一点。我直接更新了 vhost 配置,而不是使用文件.htaccess
。我相信它可以通过 来实现,.htaccess
但我的重写规则有点不对(请注意缺少/
)。还需要<Directory>
为图像目录添加声明(以允许访问)。
vhost 如下所示:
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>
答案2
别名不会这样工作。apache 将考虑第一个匹配,而忽略第二个匹配。参见此处:
https://httpd.apache.org/docs/2.4/mod/mod_alias.html
..别名和重定向按照它们在配置文件中出现的顺序进行处理,第一个匹配的优先。
回答你的问题:出于同样的原因,不可能从同一个 URL 提供多个目录。