Назад | Перейти на главную страницу

Apache: обслуживание одного и того же файла на нескольких хостах с использованием регулярного выражения

У меня установлены различные виртуальные хосты (vhosts) на сервере Apache 2.2, например:

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

На виртуальных хостах, соответствующих регулярному выражению «site [a-z] .domain», я хочу иметь возможность обслуживать тот же файл (скажем, logo.gif) из /usr/local/apache/files/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.

Может ли кто-нибудь указать мне правильное направление, если это вообще возможно?

У меня есть предложение, я не знаю, подходит ли оно для вашей среды, но оно может дать вам представление. Я не знаю, как это сделать с помощью Alias, но, возможно, вы можете использовать mod_rewrite, чтобы делать то же самое. Прежде всего создайте сайт, такой как common.domain, этот виртуальный хост будет использоваться для хранения всех файлов, используемых другими сайтами.

Создайте глобальное правило перезаписи для выполнения перенаправления,поток в stackoverflow . Вы можете определить это правило перезаписи в разделе Directory, например, если все ваши vhosts хранятся в каталоге / var / www / vhosts, например: * /var/www/vhosts/siteA.domain/

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

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

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

Вы можете определить rewriterule следующим образом:

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

# пример:
# RewriteRule "/logo.gif" "http://alvita.a.l.pic.centerblog.net/6ba61946.gif"[L]

</Directory>

Таким образом, у вас есть сопоставление виртуального хоста, и вы можете делать все, что хотите, и вы можете применить это решение для многих веб-серверов.

Я думаю, что это лучшее решение, или вы можете определить глобальное правило перезаписи в httpd.conf вне родительского каталога. Проблема с этим решением, вам нужно будет добавить это в каждый виртуальный хост:

RewriteOptions наследовать

Потому что по умолчанию правила перезаписи в VirtualHost не применяются. У вас есть дополнительная информация о поток переполнения

Хорошего дня.