URLs amigáveis - esclarecendo dúvidas
Tenho recebido diversos emails de pessoas que leram meu artigo sobre URLs amigáveis e não entenderam muito bem o processo.
Vou tentar explicar um pouco melhor esse processo.
A primeira coisa que precisa ficar clara é que o google — assim como qualquer outra search engine — não tem acesso aos arquivos dinâmicos do seu site. Os spiders acessam apenas o código (X)HTML gerado por eles.
É importante entender que um spider é como um usuário qualquer. A diferença é que ele é uma ferramenta automatizada que percorre os links que encontra e cria um índice que será usado pelo sistema de busca.
Outra coisa que também precisa ser entendida é que os spiders associam um recurso (uma página HTML, por exemplo) com a URL usada para chegar até ele. Exemplificando: digamos que você decida usar o mod_rewrite para criar URLs amigáveis.
Sendo assim, uma página que antes seria acessada pela URL www.seusite.com/index.php?data=01-02-2005&nome =meu-artigo1 agora será acessada por www.seusite.com/01/02/2005/meu-artigo. A URL antiga continuará funcionando e o google só passará a listar a nova URL se todos os links para a referida página forem atualizados para a nova URL.
A troca — ou reescrita — das URLs é feita pelo apache de maneira transparente ao usuário, portanto, apenas o servidor
tem conhecimento desta reescrita. O usuário, assim como o spider, não consegue perceber este processo.
Reescrita de URL é diferente de redirecionamento. Um redirecionamento informa ao user agent (browser, spider, leitor de tela, etc) que um recurso encontra-se acessível por outra URL. O user agent aponta para a nova URL e acessa o recurso. O processo de redirecionamento não é transparente ao usuário.
Já a reescrita (feita pelo mod_rewrite) é um processo interno ao servidor web. Este analisa uma regra de reescrita (RewriteRule)
existente em um arquivo .htaccess, executa um redirecionamento e entrega o recurso ao user agent sem informar uma nova URL.
Vou tentar explicar com um exemplo:
Consideremos a URL citada acima: www.seusite.com/index.php?data=01-02-2005&nome=meu-artigo1. Esta URL chama um script PHP, com duas variáveis e seus respectivos valores. O script executa alguma ação com esses valores (lê os dados de um banco de dados, por exemplo) e entrega ao user agent um documento HTML.
Para reescrever essa URL para www.seusite.com/01/02/2005/meu-artigo podemos usar a seguinte regra de reescrita:
RewriteEngine On #Liga o mecanismo de reescrita (mod_rewrite) RewriteRule ^([0-9]+)\/([0-9]+)\/([0-9]+)\/([A-Za-z-]+)$ /index.php?data=$1-$2-$3&nome=$4
Explicar a regra acima está fora do escopo deste artigo. Leia o artigo Gerenciamento de URLs - Criando URLs amigáveis.
O que quero deixar claro é como o apache vai executar esta tarefa.
O arquivo .htaccess é processado pelo apache toda vez que ele acessa um arquivo dentro do diretório onde ele (o .htaccess) se encontra. Quando um usuário tentar acessar a URL www.seusite.com/01/02/2005/meu-artigo o apache vai casar o padrão desta URL com a expressão regular presente na RewriteRule. Havendo compatibilidade — e neste caso há — ele vai verificar a segunda parte da regra (/index.php?data=$1-$2-$3&nome=$4) e fazer uma requisição ao arquivo com as substituições necessárias (no caso /index.php?data=01-02-2005&nome=meu-artigo). O script vai realizar as operações necessárias para gerar o conteúdo HTML e o apache entregará este conteúdo direto ao user agent. Processo transparente, lembra-se?
Mais uma vez, para essa troca de URL fazer alguma diferença nos sites de busca é necessário que se troquem todas as referências. Ou seja, trocar <a href=”http://www.seusite.com/index.php?data=01-02-2005&nome=meu-artigo”>Meu artigo</a>1 por <a href=”http://www.seusite.com/01/02/2005/meu-artigo”>Meu artigo</a>.
Outra coisa importante são os links vindos de outros sites. Se você puder, peça aos administradores dos sites para trocarem os links.
Espero com este texto ter esclarecido as dúvidas que restaram sobre mod_rewrite e URLs amigáveis. Se houver algum ponto que não tenha sido esclarecido, por favor, comentem.
[1] O espaço antes do ‘=’ foi incluído para proporcionar quebra de linha quando necessário e não faz parte da URL.


Bruno, muito bom o artigo, era um desse em português que estava faltando (a net ta recheada de arquivos falando disso, mas em inglês). Só uma coisa, se somente eu fizer as alterações de referências não basta? Porque caso mais alguém aponte vai ser apenas mais uma referência e como a antiga URL não-amigável não era lida pelo google, para ele, ela simplesmante não existe. Correto?
Abraços.