Como configurar e combinar domínios e subdomínios curinga no VirtualDocumentRoot do Apache2?

2

link

<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>

As solicitações são processadas da seguinte maneira:

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

É possível ter subdomínios e de domínios curingas? Por exemplo:

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
    
por widyakumara 15.11.2014 / 23:19

1 resposta

3

De acordo com esta documentação , várias partes de um FQDN podem ser usadas. Na sua configuração, você está usando %1 , que corresponde ao subdomínio. Se o FQDN for img.alpha.dev , então %1 resultará em img e como %2 corresponde ao domínio, isso resultará em alpha e %0 a img.alpha.dev , pois %0 corresponde a FQDN.

Implementando a seguinte configuração:

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

em /etc/httpd/conf/httpd.conf , executando mkdir -p /var/www/mydomain/info && echo helloworld > /var/www/mydomain/info/index.html , reiniciando httpd e navegando para http://info.mydomain.com/ resulta em helloworld .

No entanto, se um ServerAlias for especificado mais, por exemplo:

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

executando mkdir -p /var/www/info && echo test2_param_one > /var/www/info/index.html e navegando para info.mydomain.com resulta em test2_param_one .

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

executando mkdir -p /var/www/info.mydomain.com && echo test2_param_all > /var/www/info.mydomain.com/index.html e navegando para info.mydomain.com resulta em test2_param_all .

Concluindo, os seguintes snippets funcionam:

<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 , navegando para http://alpha.dev/ retornando test5 e navegando para http://img.alpha.dev/ returns test10 .

    
por 16.11.2014 / 21:16