Apache:使用正则expression式在多个虚拟主机上提供相同的文件

我在Apache 2.2服务器上安装了各种虚拟主机(虚拟主机),例如:

examplea.domain exampleb.domain testsitea.domain testsiteb.domain testsite.domain othersitea.domain 

在匹配正则expression式“site [az] .domain”的虚拟主机上,我希望能够从/usr/local/apache/files/logo.gif服务同一个文件(比如说logo.gif)。

如果我想在每个网站上做,我显然必须有这样的东西:

 <VirtualHost *:80> ServerName testsitea.domain ... Alias /logo.gif /usr/local/apache/files/logo.gif ... </VirtualHost> <VirtualHost *:80> ServerName testsiteb.domain ... Alias /logo.gif /usr/local/apache/files/logo.gif ... </VirtualHost> 

等等

但是,由于各种原因,我不能确保VirtualHost将设置别名,因此我需要使其成为一个全局的Apache设置,但在ServerName上正则expression式匹配。

任何人都可以在正确的方向指向我,如果这是可能的?

我有一个build议,我不知道你的环境是否可以,但它可以给你想法。 我不知道如何做到这一点与别名,但也许你可以使用mod_rewrite,做同样的事情。 首先创build一个像common.domain一样的网站,这个虚拟主机将被用来存储其他网站使用的所有文件。

创build一个全局重写规则来执行redirect, 在stackoverflow上的线程 。 您可以在“目录”部分中定义此重写规则,例如,如果所有虚拟主机都存储在如下所示的目录/ var / www / vhosts下:* /var/www/vhosts/siteA.domain/

  • /var/www/vhosts/siteB.domain/

  • /var/www/vhosts/siteC.domain/

  • /var/www/vhosts/siteD.domain/

您可以像这样定义重写代码:

 <Directory /var/www/vhosts> Options FollowSymLinks AllowOverride None RewriteEngine On RewriteCond "%{HTTP_HOST}" "site[az]*\.example\.com" [NC,OR] RewriteCond "%{SERVER_NAME}" "site[az]*\.example\.com" [NC] RewriteRule "/logo.gif" "http://common.example.com/logo.gif" [L] 

#示例:
#RewriteRule“/logo.gif”“ http://alvita.alpic.centerblog.net/6ba61946.gif ”[L]

 </Directory> 

所以你有虚拟主机匹配,你可以做你想要的,你可以申请这个解决scheme的许多networking服务器。

我认为这是最好的解决scheme,或者你可以在父目录之外的httpd.conf中定义全局重写规则。 这个解决scheme的问题需要在每个虚拟主机中添加:

RewriteOptionsinheritance

因为默认情况下,重写规则不适用于VirtualHost。 你有更多关于stakoverflow线程的信息

祝你今天愉快。