我在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线程的信息
祝你今天愉快。