URLs Amigáveis com o módulo Rewrite


Hoje em dia o a utilização de SEO é muito importante. Ainda mais com essa nova briga de motores de busca. E uma das dicas para melhorar a visibilidade é usar URLs que descrevam a página, em vez de códigos sem sentido. E isso também ajuda os visitantes. Você pode até pensar: “Se eu fizer isso, não posso mais usar os scripts de servidor”, mas isso está completamente errado. É aí que entra o módulo Rewrite do Apache.

O módulo Rewrite reescreve uma URL baseado nos parâmetros que você definir. Assim, um link do tipo http://www.exemplo.com/noticia/1234 pode ser transformado em http://www.exemplo.com/noticias.php?id=1234 permitindo o uso de scripts personalizados.

Vamos ao lado prático da questão. Primeiro, temos que saber se o mod_rewrite está ativado no servidor. Para isso, basta dar uma olhada no phpinfo().

mod_rewrite se encontra na lista

Caso não consiga encontrar, outra alternativa é usar o seguinte script:

1
2
3
4
5
6
7
<?php
 if (in_array("mod_rewrite",apache_get_modules())) {
 echo "Parabéns, o Módulo Rewrite está habilitado!";
} else {
 echo "Sinto muito, mas o Módulo Rewrite não foi habilitado :(";
}
?>

Se o servidor é seu (e você está usando linux) pode usar o comando

# a2enmod rewrite

para habilitar o módulo.

Para criar uma regra de redirecionamento, você precisa alterar o arquivo .htaccess na raiz do seu site ou em qualquer pasta que deseje utilizar o recurso. Caso o tal arquivo não exista, você podera criá-lo. É possível que o servidor impeça a utilização desse arquivo, mas em geral ele é permitido. Enfim, adicione as seguintes linhas no arquivo .htaccess:

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ script.php?redir=$1

A primeira linha habilita o módulo Rewrite no diretório em questão. A segunda evita que a regra se aplique a arquivos que existam fisicamente. A terceira é idêntica à segunda, mas diz respeito aos diretórios ao invés de arquivos. E a última é a regra propriamente dita, que redireciona qualquer texto após o diretório do .htaccess para script.php, enviando o texto na variável redir. Assim, uma URL http://www.exemplo.com/noticia/1234 será enviado para http://www.exemplo.com/script.php?redir=noticia/1234. Lembrando que isso não é um “redirecionamento” e sim uma renomeação de URL, os navegadores e motores de busca abrem a página como se ela estivesse fisicamente em http://www.exemplo.com/noticia/1234.

Outro exemplo é o caso de alteração de domínio. Caso você mude do www.exemplo.provedor.com para www.exemplo.com, você poderia criar um script no index.php do tipo:

1
2
3
4
5
<?php
header("HTTP/1.1 301 Moved Permanently");
header("location:http://www.exemplo.com");
exit;
?>

Isso é válido, mas se alguem acessar a URL http://www.exemplo.provedor.com/noticia/1234 simplesmente receberia um erro 404 de página não encontrada. Para evitar isso, usa-se o módulo Rewrite, usando a seguinte regra no .htaccess:

RewriteEngine On
RewriteRule (.*) http://www.exemplo.com/$1 [R=301,L]

Essa regra envia, por exemplo, a URL http://www.exemplo.provedor.com/noticia/1234 para http://www.exemplo.com/noticia/1234, ainda enviando o código 301 de redirecionamento permanente, informando aos navegadores, caches e mecanismos de busca, que este site mudou de endereço.

Mais informações sobre o módulo Rewrite pode ser encontrado na documentação do Apache em http://httpd.apache.org/docs/2.2/rewrite.

Fontes:

  1. Clube PC – Ativando o mod_rewrite.
  2. Servidores Linux, Guia Prático: mod_rewrite.

    

Deixe um comentário