Apache: servindo o mesmo arquivo em vários vhosts usando regex

2

Eu tenho várias configurações de hosts virtuais (vhosts) em um servidor Apache 2.2, como:

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

Em hosts virtuais que correspondam à expressão regular "site [az] .domain", desejo poder exibir o mesmo arquivo (digamos logo.gif) em /usr/local/apache/files/logo.gif. / p>

Se eu quisesse fazer isso em cada site, obviamente teria que ter algo como:

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

etc etc

Mas, por várias razões, não posso garantir que o VirtualHost seja configurado com o alias e, portanto, preciso torná-lo uma configuração global do Apache, mas com expressão regular correspondente no Nome do Servidor.

Alguém pode me apontar na direção correta se isso for possível?

    
por Richy B. 06.08.2013 / 16:33

1 resposta

0

Eu tenho uma sugestão, não sei se está tudo bem para o seu ambiente, mas pode dar uma ideia. Eu não sei como fazer isso com o Alias, mas talvez você possa usar o mod_rewrite, para fazer as mesmas coisas. Primeiro de tudo criar um site como common.domain este host virtual será usado para armazenar todos os arquivos usados por outros sites.

Crie uma regra de reescrita global para realizar o redirecionamento, thread no stackoverflow . Você pode definir essa regra de reescrita em uma seção do Diretório, por exemplo, se todos os vhosts estiverem armazenados no diretório / var / www / vhosts desta forma: * /var/www/vhosts/siteA.domain /

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

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

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

Você pode definir o rewriterule assim:

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

# example:
# RewriteRule "/logo.gif" " link " [L]

</Directory>

Assim, você tem a correspondência de Host Virtual e pode fazer o que quiser, e pode aplicar essa solução a muitos servidores da Web.

Eu acho que é a melhor solução ou você pode definir a regra de reescrita global no httpd.conf fora do diretório pai. O problema com esta solução, você precisará adicionar isso em cada virtualhost:

RewriteOptions inherit

Porque, por padrão, a regra de reconfiguração não se aplica ao VirtualHost. Você tem mais informações sobre o thread do stakoverflow

Tenha um bom dia.

    
por 08.08.2013 / 01:00