sysmerge IT

21 нояб. 2020 г.

Apache2 - VirtualDocumentRoot + DocumentRoot

VirtualDocumentRoot используется для того, чтобы вебсервер мог по имени хоста определить коренную директорию домена. В общем случае достаточно такой строки:

VirtualDocumentRoot /var/www/%0

 %0 интерпретируется в полное имя хоста ( domen.ru / sub.domen.ru и тд). Соответственно, при запросе domen.ru мы попадем в  /var/www/domen.ru.

А теперь представим, что у нас есть определенный домен, для которого нужны уникальные правила обработки. К примеру, wildcard сабдомены без создания непосредственно директорий сабдоменов - отправлять все запросы с сабдомена на основной домен.

Сразу приведу готовый сниппет:

VirtualDocumentRoot /var/www/%0

<VirtualHost *:80>

    ServerAlias *.custom-domain.ru

     ServerAlias custom-domain.ru

    UseCanonicalName Off

    DocumentRoot /var/www/custom-domain.ru/

    VirtualDocumentRoot none

</VirtualHost>

Стоит объяснить  -  VirtualDocumentRoot в глобальном конфиге будет переопределять все значения для DocumentRoot, если не указать VirtualDocumentRoot none ( для каждого VirtualHost, где нужно отключить VirtualDocumentRoot ).  

В итоге все работает как и ожидалось - все домены обрабатываются через VirtualDocumentRoot, а custom-domain.ru и все его сабдомены работают через определенный DocumentRoot