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

Как настроить и объединить домены с подстановочными знаками и поддомены в VirtualDocumentRoot Apache2?

httpd-vhosts.conf

<Directory "/Volumes/DATA/websites">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
    Require all granted
</Directory>

<Virtualhost *:80>
    VirtualDocumentRoot "/Volumes/DATA/websites/default"
    ServerName default.dev
    UseCanonicalName Off
</Virtualhost>

<Virtualhost *:80>
    VirtualDocumentRoot "/Volumes/DATA/websites/%1/www"
    ServerAlias *.dev
    UseCanonicalName Off
</Virtualhost>

В настоящее время запросы обрабатываются следующим образом:

alpha.dev   -> /Volumes/DATA/websites/alpha/www
beta.dev    -> /Volumes/DATA/websites/beta/www

Можно ли использовать домены с подстановочными знаками и поддомены? Например.:

alpha.dev       -> /Volumes/DATA/websites/alpha/www
img.alpha.dev   -> /Volumes/DATA/websites/alpha/img
cdn.alpha.dev   -> /Volumes/DATA/websites/alpha/cdn

beta.dev        -> /Volumes/DATA/websites/beta/www
docs.beta.dev   -> /Volumes/DATA/websites/beta/docs
blog.beta.dev   -> /Volumes/DATA/websites/beta/blog

В соответствии с эта документация можно использовать несколько частей FQDN. В вашей конфигурации вы используете %1 что соответствует подобласти. Если полное доменное имя img.alpha.dev затем %1 приведет к img и, как %2 соответствует области, в которой он приводит alpha и %0 к img.alpha.dev так как %0 соответствует FQDN.

Реализация следующей конфигурации:

<VirtualHost *:80>
    ServerAlias *
    VirtualDocumentRoot /var/www/%2/%1
</VirtualHost>

в /etc/httpd/conf/httpd.conf, выполняя mkdir -p /var/www/mydomain/info && echo helloworld > /var/www/mydomain/info/index.html, перезапуск httpd и переход к http://info.mydomain.com/ приводит к helloworld.

Однако, если ServerAlias ​​указано больше, например:

<VirtualHost *:80>
    ServerAlias *.mydomain.com
    VirtualDocumentRoot /var/www/%1
</VirtualHost>  

выполнение mkdir -p /var/www/info && echo test2_param_one > /var/www/info/index.html и переход к info.mydomain.com приводит к test2_param_one.

<VirtualHost *:80>
    ServerAlias *.mydomain.com
    VirtualDocumentRoot /var/www/%0
</VirtualHost>

выполнение mkdir -p /var/www/info.mydomain.com && echo test2_param_all > /var/www/info.mydomain.com/index.html и переход к info.mydomain.com приводит к test2_param_all.

В заключение, следующий фрагмент работает:

<VirtualHost *:80>
    ServerAlias *.*.dev
    VirtualDocumentRoot /var/www/%2/%1
</VirtualHost>
<VirtualHost *:80>
    ServerAlias *.dev
    VirtualDocumentRoot /var/www/%1/test
</VirtualHost>

mkdir -p /var/www/alpha/test && echo test5 > /var/www/alpha/test/index.html, mkdir -p /var/www/alpha/img && echo test10 > /var/www/alpha/img/index.html, переход к http://alpha.dev/ возвращается test5 и переход к http://img.alpha.dev/ возвращается test10.