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().

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 rewritepara 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: