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

Подстановочные знаки ServerName в виртуальных хостах Apache на основе имен?

В нашей локальной сети я установил несколько «поддельных» TLD на DNS-сервере с намерением использовать их для виртуального хостинга на основе имен Apache. Я хотел бы совместить это с массовым виртуальным хостингом (например, VirtualDocumentRoot) на сервере LAMP Ubuntu 10.04.

Однако я не могу заставить его выбрать правильный vhost!

Вот краткое изложение конфигурации Apache:

NameVirtualHost 10.10.0.205

<VirtualHost 10.10.0.205>
   ServerName *.test
   VirtualDocumentRoot /var/www/%-3.0.%-2/test/%1/
   CustomLog /var/log/apache2/access.log vhost_combined
</VirtualHost>

<VirtualHost 10.10.0.205>
   ServerName *.dev
   VirtualDocumentRoot /var/www/%-3.0.%-2/dev/%1/
   CustomLog /var/log/apache2/access.log vhost_combined
</VirtualHost>

Имя хоста, например www.domain.com.dev, правильно разрешается в 10.10.0.205, но всегда выбирает верхний виртуальный хост, а не нижний, который соответствует более точному.

У меня создалось впечатление, что Apache сначала попытается сопоставить ServerName, а затем по умолчанию выберет верхний виртуальный хост для данного IP. Что я делаю не так? Или это невозможно, и я должен использовать другой IP-адрес для каждого TLD?

apachectl -S выводит (обрезано):

10.10.0.205:*          is a NameVirtualHost
    default server *.test
    port * namevhost *.test
    port * namevhost *.dev

Использовать ServerAlias, скорее, чем ServerName в одиночестве:

ServerName somename.dev

ServerAlias *.dev

Если это может помочь, просто чтобы немного дополнить ответ Мо:

Подстановочные знаки в ServerAlias ​​также работают с частичными доменными именами, такими как

ServerName somename.dev

ServerAlias *-mysite.dev

Недавно он спас мне жизнь ^^ (основной сайт с субдоменами для каждого субприложения, например admin-somename.dev, bo-somename.dev, api-somename.dev...)