Apache обслуживает статический контент в соответствии с именем хоста
У меня есть Tomcat, работающий за Apache и некоторые веб-приложения, работающие на нем. Мое приложение обрабатывает белую метку, поэтому, если какой-то пользователь перейдет на subnet1.myhost.com, он увидит какой-то веб-сайт и subnet2.myhost.com, он должен увидеть другой веб-сайт.
Как часть решения, apache должен обрабатывать css-запросы и перенаправлять его в правильные места, поэтому, если клиентское приложение из subnet1.myhost.com запрашивает /styles/main.css, apache должен перенаправлять его в соответствии с именем хоста, поэтому он будет /subnet1/styles/main.css Как я могу настроить такое поведение?
Спасибо
2 ответа
Если вам нужен единственный VirtualHost, вы можете сделать это с помощью mod_rewrite:
<VirtualHost :80>
ServerName *.myhost.com
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.*)\.myhost\.com
RewriteRule ^/styles/(.*)$ /%1/styles/$1 [L]
</VirtualHost>
Корень вашего документа должен иметь следующую структуру:
subnet1
styles
file1.css
file2.css
subnet2
styles
file1.css
file2.css
other_files_shared_across_domains
И ваш CSS-URL должен выглядеть так:
http://subnet1.myhost.com/styles/file1.css
http://subnet1.myhost.com/styles/file2.css
http://subnet2.myhost.com/styles/file1.css
http://subnet2.myhost.com/styles/file2.css
Чтобы добавить новые субдомены, просто добавьте новые папки в папку DocumentRoot
Это легко сделать с помощью отдельного блока VirtualHost для каждого пользовательского сайта. Например
<VirtualHost :80>
ServerName subnet1.myhost.com
Alias /styles /subnet1/styles
...
</VirtualHost>
...
представляет те же ключевые слова в каждом блоке, который пересылается в Tomcat. Вы можете включить файл здесь.
В Debian или Ubuntu вы можете поместить каждый из этих блоков в отдельный файл в /etc/apache2/sites-available
, Для Ubuntu 12.04 или более ранних версий файлы не имеют .conf
расширение, но для более свежих выпусков Ubuntu они делают.
Тогда ты бежишь sudo a2ensite subnet1.myhost.com
включить сайт.