A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa

Um site, múltiplos domínios

Sab

5

Dez

2009


14:03

(3 votos, média 5.00 de 5) 


Tenho vários domínios com numaboa e, por enquanto, apenas um site faz uso deles. Inicialmente configurei o DNS apontando todos eles para o endereço IP do servidor e, na configuração do webserver Apache, apontei todos eles para o mesmo diretório onde se encontra a área pública do site. Mas será que isto é a melhor solução?

Os pormenores

Como disse, tenho vários domínios para o meu site. Alguns deles são numaboa.com, numaboa.com.br e numaboa.info. Todos eles levam para a Aldeia Numaboa e mostram o mesmo conteúdo, tanto faz qual dos três endereços o usuário escolher. Até aí, tudo bem...

Para obter este efeito configurei três hosts virtuais no Apache. Para a versão 1.3, esta configuração é feita no arquivo /etc/apache/httpd.conf; na versão 2.0 existem três arquivos, um para cada domínio, em /etc/apache2/sites-enabled/nome.arquivo.

NameVirtualHost *

<VirtualHost *:80>
    ServerAdmin admin@numaboa.com.br
    DocumentRoot /www/numaboa.com/public_html
    ServerName www.numaboa.com
    ErrorLog /www/numaboa.com/logs/error_log
    CustomLog /www/numaboa.com/logs/access_log common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin admin@numaboa.com.br
    DocumentRoot /www/numaboa.com/public_html
    ServerName www.numaboa.com.br
    ErrorLog /www/numaboa.com/logs/error_log
    CustomLog /www/numaboa.com/logs/access_log common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin admin@numaboa.com.br
    DocumentRoot /www/numaboa.com/public_html
    ServerName www.numaboa.info
    ErrorLog /www/numaboa.com/logs/error_log
    CustomLog /www/numaboa.com/logs/access_log common
</VirtualHost>

A desvantagem de múltiplos endereços para o mesmo site

Pesquisando no Google verifiquei que havia mais de uma referência para o mesmo conteúdo e que a diferença estava apenas no domínio. Finalmente caiu a ficha! O que eu estava fazendo era pulverizar o número de acessos e a consequência se tornou óbvia: eu mesma estava prejudicando meu ranking nos mecanismos de busca sad2

Ato contínuo, resolvi estudar um pouco mais as configurações do Apache para tentar encontrar um meio de trocar o endereço:

numaboa.com/artigo1       20 acessos   --
numaboa.com.br/artigo1     5 acessos    |----> numaboa.com/artigo1   26 acessos
numaboa.info/artigo1       1 acesso    --

O esquema acima mostra a consequência óbvia se conseguirmos que os endereços com numaboa.com.br e numaboa.info forem trocados por numaboa.com. Depois de ler um bocado e de tentar entender como funcionam as diretivas de regras e substituições do Apache, cheguei à conclusão de que, como sempre, a solução é mais fácil do que parece de início. Vou contar os tropeços que tive, não para desanimar ninguém, mas para que todos possam aprender com os erros.

A configuração do Apache

Existe uma diretiva feita sob medida para fazer substituições - é a RewriteRule (regra de reescrita). Esta diretiva pede uma regra, de acordo com a qual serão feitas as substituições, e uma string de referência que será usada como base. A primeira coisa que tive que destrinchar foi a regra, cheia de caracteres esotéricos próprios das expressões regulares (regex):

RewriteRule ^/(.*)   http://www.numaboa.com/$1 [L,R]

Isto transforma o endereço /www.numaboa.info/artigo1 em http://www.numaboa.com/artigo1. Neste caso, a regra é ^/(.*) e http://www.numaboa.com/$1 é a string de referência para a substituição. As regex são complicadas por natureza, mas, uma vez entendidas, facilitam a vida pra caramba. Acompanhe como funciona a regra e a substituição.

O sinal ^ é uma âncora e indica o início de uma string. Neste caso a string começa com uma barra /, pois a URL de referência é representada na forma /www.numaboa.info/artigo1 (ou /www.numaboa.com.br/artigo1). Se, ao invés da regra completa, usarmos apenas ^/ e se a string de referência fosse apenas http://www.numaboa.com/, a substituição daria como resultado

http://www.numaboa.com/www.numaboa.info/artigo1

Esta é a primeira parte do resultado que queremos obter, pois a primeira barra "/" da URL foi substituída por "http://www.numaboa.com". Uma das características do motor regex é parar depois da primeira vez em que a regra aplicável.

Que tal dividir a URL em grupos usando a barra "/" como delimitador? Se assim o fizermos, a URL /www.numaboa.info/artigo1 fornecerá dois grupos, "/www.numaboa.info" (o grupo 0) e "/artigo1" (o grupo 1). Para obter estes grupos usamos os parênteses que, nas expressões regulares, servem exatamente para propósito. Neste caso, numa primeira etapa, nossa regra se transforma em ^/(). Agora falta informar o que pegar para formar cada grupo. Como queremos a string completa, usamos o ponto seguido por um asterisco e a regra fica assim: ^/(.*). Nas regex, o ponto significa qualquer caractere e o asterisco indica para pegar todos eles (na verdade, o asterisco significa zero ou mais ocorrências do elemento precedente).

De posse dos grupos podemos fazer a substituição de acordo com a string de referência: o grupo 0 (/www.numaboa.info) será substituído pela string literal http://www.numaboa.com e o grupo 1 será substituído por ele mesmo (/artigo1). Na string de referência $1 representa o grupo 1. Até aqui, tudo o que foi visto faz parte do "raciocínio" regex.

Mas o que acontece se a URL for /www.numaboa.info/seção1/artigo1? Pela explicação dada até agora, a URL será substituída por http://www.numaboa.com/seção1, o que não está correto. Neste ponto entram em ação as flags que o Apache oferece. A flag L (de Last, último) faz com que o processamento da regra seja interrompido logo depois da primeira vez em que a regra tenha sido aplicada, ou seja, a URL é "picada" apenas uma vez. Ao aplicarmos a flag L obtemos o grupo 0 (/www.numaboa.info) e, como o processamento da regra é interrompido, o grupo 1 fica com o resto (/seção1/artigo1).

Agora só falta informar o Apache de que ele deve redirecionar o navegador para o endereço completo fornecido. Como o endereço precisa ser totalmente qualificado (fully-qualified) colocamos http://www.numaboa.com na string de referência (e não /www.numaboa.com). Para forçar o redirecionamento usamos a flag R (de Redirect, redirecionar) do Apache.

Finalmente está tudo pronto e podemos escolher onde colocar a diretiva. Esta pode ser adicionada à configuração de host virtuais ou num arquivo htaccess. Como é mais fácil e rápido usar um htaccess para fazer um teste, coloquei o arquivo no diretório raiz do site (lembre-se de que o htaccess precisa ser um arquivo oculto, portanto seu nome precisa ser precedido por um ponto .htaccess) e chamei uma página usando http://www.numaboa.info. Para minha decepção, não aconteceu nada sad2

O motivo é muito simples: antes de reescrever é preciso acionar o motor de reescrita do Apache, senão a substituição não é feita:

RewriteEngine On
RewriteRule ^/(.*)   http://www.numaboa.com/$1 [L,R]

Minha solução definitiva

Como costumo ser muito avarenta em relação a arquivos htaccess, preferi eliminar o htaccess do diretório raiz e colocar as diretivas nos hosts virtuais:

NameVirtualHost *

<VirtualHost *:80>
    ServerAdmin admin@numaboa.com.br
    DocumentRoot /www/numaboa.com/public_html
    ServerName www.numaboa.com
    ErrorLog /www/numaboa.com/logs/error_log
    CustomLog /www/numaboa.com/logs/access_log common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin admin@numaboa.com.br
    DocumentRoot /www/numaboa.com/public_html
    ServerName www.numaboa.com.br
    RewriteEngine On
    RewriteRule ^/(.*) http://www.numaboa.com/$1 [L,R]
    ErrorLog /www/numaboa.com/logs/error_log
    CustomLog /www/numaboa.com/logs/access_log common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin admin@numaboa.com.br
    DocumentRoot /www/numaboa.com/public_html
    ServerName www.numaboa.info
    RewriteEngine On
    RewriteRule ^/(.*) http://www.numaboa.com/$1 [L,R]
    ErrorLog /www/numaboa.com/logs/error_log
    CustomLog /www/numaboa.com/logs/access_log common
</VirtualHost>

Depois da alteração, reiniciei o Apache para que a nova configuração entrasse em ação. Foi vapt-vupt biggrin

Логофет Вадимпосуда для приготовления пищименю никас qlik senseкак выбрать погружной блендерtechnical document translationсайт отзывов

Informações adicionais