Subdomínios de caractere curinga automáticos no Apache

2

Atualmente, tenho vários hosts virtuais configurados para subdomínios individuais. Seria muito mais fácil se eu pudesse dizer ao Apache para encontrar automaticamente a pasta usando um curinga. Por exemplo, hello.domain.com usaria o diretório /var/www/hello como seu DocumentRoot .

No entanto, gostaria de poder definir exceções, por exemplo, se eu quisesse que helloworld.domain.com apontasse para /var/www/helloworld/public .

Eu olhei em volta, mas todos os exemplos parecem estar fazendo algo diferente.

    
por Oliver Joseph Ash 11.01.2013 / 18:46

2 respostas

6

Você poderá configurar esse comportamento com algo ao longo destas linhas:

NameVirtualHost *:80
<VirtualHost *:80>
  ServerName catchall.domain.com
  ServerAlias *.domain.com
  VirtualDocumentRoot /var/www/%1
</VirtualHost>
<VirtualHost *:80>
  ServerName helloworld.domain.com
  DocumentRoot /var/www/helloworld/public
</VirtualHost>
    
por 11.01.2013 / 18:57
1

O acima usa mod_vhost_alias , eu uso mod_rewrite , algo assim no primeiro VirtualHost definido (padrão):

RewriteEngine on
RewriteMap lc int:tolower

RewriteCond /var/www/${lc:%{SERVER_NAME}} -f 
RewriteRule ^/(.*)   /var/www/${lc:%{SERVER_NAME}}/htdocs/$1  

Isso permite adicionar um pouco mais de lógica, caso seja útil. Eu tinha pensado que outra vantagem da abordagem mod_rewrite é que ele iria lidar com qualquer domínio, não necessariamente sub-domínios - mas no teste (httpd-2.2.x) parece que ServerAlias aceitará qualquer razoável * e? curingas, incluindo * .com ou até *. Então, não vença se você não precisar da complexidade.

Em ambos os casos, pode ser útil usar as diretivas LogFormat / CustomLog para colocar o nome do host virtual solicitado ( %v ) nos logs:

LogFormat   "%v %h %l %u %t \"%r\" %>s %b"   log-with-vhost

Veja também o link para muitas das dicas de hospedagem virtual em massa.

    
por 11.01.2013 / 21:02