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 включить сайт.

Другие вопросы по тегам