Reescrevendo URLs com o Apache
Li um artigo bastante elucidativo no site do Paulo Rodrigo Teixeira sobre redirecionamento de páginas em seu aspecto relacionado ao SEO. Inclusive até foi discutido um pouco sobre isso no post que mostrava técnicas que alguns sites estão usando para melhorar, ilicitamente, sua indexação e melhorar suas posições na ferramenta de busca do Google, inclusive aparecendo como resultados de buscas que não têm relação alguma com o conteúdo do site em si.
Para quem se interessa por SEO, o site do Paulo tem bastante conteúdo de qualidade. Recomendo a visita.
Depois que li o artigo, me inspirei a estender um pouco o assunto usando o Apache como ferramenta principal, já que o redirecionamento de URL nada mais é do que uma reescrita de URL, obtida através do uso do mod_rewrite (novamente estamos utilizando o Apache 2.0 como base para o artigo). Fora que o Apache é um software fora de série.
A reescrita de URLs tem muitas funcionalidades. As mais conhecidas são o redirecionamento quando um site muda de domínio, pois não é nada interessante deixar os visitantes e links que lhe referenciam em outros sites com bookmarks quebrados, e para gerar as “pretty URLs”, que são endereços mais legíveis que facilitam muito a indexação e, conseqüentemente, que os visitantes consigam chegar ao conteúdo que estavam procurando.
Praticamente todas as frameworks e kits de desenvolvimento para web, bem como aplicações já feitas, como o Wordpress, já trazem o recurso de “pretty URLs” de alguma forma. Assim como o redirecionamento, também é possível fazer certos tipos de roteamento dentro da aplicação dependendo da URL digitada, sendo que estou falando no nível de aplicação realmente, e não do servidor web.
Vamos começar então explicado como utilizar o recurso de reescrita de URLs para fins de redirecionamento de páginas.
Primeiramente você deve ativar a reescrita colocando a diretiva RewriteEngine On dentro de um arquivo .htaccess que está dentro do diretório do seu servidor web que será acessado.
A idéia do arquivo .htaccess é indicar configurações para o diretório que ele está armazenado no momento em que o servidor web carrega algo do mesmo. Lembre-se de verificar nos arquivos de configuração do Apache (normalmente apache2.conf) se ele está lendo os arquivos .htaccess, pois o default é não ler, pois isto traz um aumento de desempenho considerável.
Com o .htaccess funcionando vamos ativar a reescrita e colocar a regra mencionada pelo Paulo:
RewriteEngine On
RewriteRule (.*) http://hypercast.info/$1 [R=301,L]
A sintaxe do comando utiliza expressões regulares, portanto espero que o visitante saiba interpretá-las, pois isto não é o foco do artigo. A primeira parte indica que qualquer cadeia de caracteres indicada depois do domínio será guardada (retro-referência) e colocada na nova URL que será construída, que começa com um domínio já estabelecido seguido da referência à string da URL de origem da requisição que foi armazenada.
Depois, o parâmetro R indica que um redirecionamento será feito. O código 301, que significa que o site foi movido permanentemente. Por fim, o L indica para a engine de reescrita que pare com o processamento das regras em cima da nova URL gerada.
Este exemplo cobre, acredito eu, todas as necessidades que um site tem quando é movido de domínio, pois tanto o endereço da página inicial do site quanto recursos com URLs maiores são redirecionados adequadamente.
Quando movi o Hypercast para seu novo domínio e hospedagem, utilizei uma regra bastante parecida, só que com detalhes para focar mais no que eu queria, baseado no layout de URLs do Wordpress e logando tudo que acontecia. Era algo mais ou menos assim (não lembro exatamente):
^/([0-9]+)/([0-9]+)/([0-9]+)/(.*)[/]*$
E para logar:
RewriteLog logs/rewrite.log
Um detalhe importante é que quando o cliente faz a requisição, todo o cabeçalho é gerado pelo navegador, pois a princípio ele não sabe que o site pretendido foi movido. Porém, muitas variáveis de ambiente estão disponíveis, mesmo para uma checagem e/ou reescrita de URLs. Uma delas é a assinatura do navegador do cliente, que indica qual browser ele está usando.
É possível por exemplo, redirecionar todos os seus visitantes que usam o Internet Explorer diretamente para a página de downloads do Firefox! Isso é possível através de uma diretiva condicional:
RewriteCond %{HTTP_USER_AGENT} ^.*IE.*$
RewriteRule .* http://www.getfirefox.org/
Outra possibilidade interessante é a criação de sub-domínios. Por exemplo, o padrão do Apache é oferecer o http://servidor.com/~username para acessar as páginas dos usuários do sistema. Porém isto não é muito conveniente de escrever. Seria melhor se o layout da URL fosse algo do tipo http://username.servidor.com/.
Para realizar a configuração, é preciso primeiro ajustar o servidor DNS master, adicionando todas as entradas de usuários e vinculando todas como um nome canônico (CNAME) do seu domínio (servidor.com, neste caso). Depois, basta reescrever a URL:
RewriteCond %{HTTP_HOST} ^[^.]+\.servidor\.com$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^([^.]+)\.servidor\.com(.*)$ /home/$1/public_html/$2
Assim estamos fazendo a checagem do conteúdo do nome do host do servidor web e encadeando a regra com a próxima, que reescreve o endereço e pode, agora, criar uma subsolicitação interna para resgatar o conteúdo dentro da pasta do usuário.
Os dois exemplos anteriores envolveram o uso de variáveis de ambiente no contexto das reescritas. Esse recurso com certeza expande muito as possibilidades. Podemos até restringir o acesso a um site somente reescrevendo a URL:
RewriteCond %{REMOTE_ADDR} ^20[0?1][.+]
RewriteRule .* - [F]
Estas regras proibiriam o acesso ao site por todos os visitantes com IP começando por 200.*.*.* e 201.*.*.*, o que engloba a maior parte do IPs do Brasil.
Depois destes exemplos, implementar as “pretty URLs” deve ficado bastante fácil.
As possibilidades são inúmeras. Caso se interesse pelo assunto, sugiro que faça uma boa pesquisa, pois o mod_rewrite é muito extensível e pode se combinar com outras diretivas do Apache.
Espero que tenham gostado de mais este artigo sobre o Apache. Outros virão!
Artigos Relacionados:
Sobre este artigo
You’re currently reading “Reescrevendo URLs com o Apache,” an entry on Hypercast
- Published:
- 03.19.07 / 9pm
- Category:
- Uncategorized
1 Comment
Jump to comment form | comments rss [?] | trackback uri [?]