Configurando subdomínios em localhost com Apache2

Tags: — May 26, 2008 @ 3:30 pm

Para quem desenvolve aplicações web em computadores compartilhados fica difícil trabalhar com um DocumentRoot que pode ser acessado por todos. A Solução mais prática é criar um DocumentRoot na $HOME de cada usuário, e usar o módulo userDir, mas isto gera alguns problemas quando trabalhando com mod_rewrite, exigindo a definição de uma regra RewriteBase no .htaccess.

Para acertar isto, podemos criar um subdomínio na própria máquina local, como http://exemplo.localhost.

Mesmo para quem é o único usuário de seu computador de desenvolvimento, é uma boa idéia separar DocumentRoots por usuário, uma vez que isso previne definir permissão de escrita ao DocumentRoot padrão do Apache, ou acesso a uma conta de super usuário (root).

Antes de tudo habilite e configure o módulo userdir no apache. No Debian basta criar um link simbólico para o módulo e o arquivo de configuração de /etc/apache2/mods-available/ para /etc/apache2/mods-enabled/:

# cd /etc/apache2/mods-enabled
# ln -s ../mods-available/userdir.conf userdir.conf
# ln -s ../mods-available/userdir.load userdir.load

Então crie um VirtualHost com a configuração a seguir, substituindo usuario pelo seu nome de usuário no sistema, e as pastas public_html e cgi-bin caso necessário:

<virtualhost>
    ServerName usuario
    ServerAlias www.usuario.localhost usuario.localhost
    DocumentRoot /home/usuario/public_html
    ServerAdmin webmaster@usuario.localhost
    UseCanonicalName Off
    ScriptAlias /cgi-bin/ /home/usuario/public_html/cgi-bin/
</virtualhost>

No Debian as configurações de VirtualHost ficam no diretório /etc/apache2/sites-available, assim basta criar um arquivo.conf neste local com a configuração acima e criar um link simbólico para ele em /etc/apache2/sites-enabled, adicionando a este as linhas acima.

# cd /etc/apache2/sites-enabled
# ln -s ../sites-available/usuario.conf usuario.conf

Agora seu subdomínio está configurado no servidor web Apache, mas ainda falta dizer para seu computador que este domínio pertence ao servidor local. Para isso adicione a seguinte linha ao arquivo /etc/hosts:

127.0.0.1    usuario.localhost    usuario

Depois disso apenas reinicie o apache (/etc/init.d/apache2 restart ou /etc/init.d/httpd restart) e você poderá acessar seu DocumentRoot digitando http://usuario.localhost em qualquer navegador web, sem se preocupar com regras adicionais no .htaccess.