使用 Apache2 通过同一 URL 为 Web 根目录之外的多个目录提供服务

使用 Apache2 通过同一 URL 为 Web 根目录之外的多个目录提供服务

是否可以设置 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 提供多个目录。

相关内容