Regras de mod_rewrite | DeServ – Info
Lomadee, uma nova espcie na web. A maior plataforma de afiliados da Amrica Latina.

Regras de mod_rewrite

By Flávio Silva

O mod_rewrite tem a função de reescrever URLs a partir de um conjunto de parâmetros especificado por você. O uso mais simples para ele é quando você muda o domínio de acesso do site e quer que todos os links sejam redirecionados para o novo endereço.

Imagine, por exemplo, que você migrou do http://dominio.provedor.com.br para http://www.dominio.com.br. Você poderia simplesmente criar um arquivo “index.php” no diretório raiz do antigo endereço com o seguinte conteúdo:

<?php
header(“HTTP/1.1 301 Moved Permanently”);
header(“location:
http://www.dominio.com.br“);
exit;
?>

Este é um modelo simples de redirecionamento, que faz com que o servidor passe a encaminhar os acessos para o endereço especificado, usando o código 301, que indica que a página mudou permanentemente de endereço.

O problema é que fazendo isso o redirecionamento funcionaria apenas para os visitantes que acessassem a página principal do site. Um visitante que tentasse acessar o “http://dominio.provedor.com.br/produtos/index.php?id=312“, por exemplo, receberia um erro 404.

Usando o mod_rewrite, você poderia solucionar isso de forma muito simples. O primeiro passo é verificar se o módulo está carregado na configuração do Apache 2. No caso das distribuições derivadas do Debian, você pode ativá-lo usando o comando a2enmod:

# a2enmod rewrite

Muito provavelmente você receberá um “This module is already enabled!” como resposta, já que ele vem ativo por padrão na maioria das instalações. No caso do Fedora, CentOS e outras distribuições derivadas do Red Hat, verifique o arquivo “/etc/httpd/conf/httpd.conf” e, caso necessário, descomente as linhas:

LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c

Depois de checar a ativação do módulo, falta apenas a configuração, que é feita através do arquivo “.htaccess“, criado no diretório raiz do site antigo (ou seja, na pasta de arquivos do “http://dominio.provedor.com.br”). Embora o .htaccess seja geralmente associado com o uso de senhas, ele na verdade tem diversos outros usos, incluindo a configuração do mod_rewrite.

Para que o mod_rewrite passe a encaminhar todas as requisições automaticamente, o conteúdo do arquivo “.htaccess” seria:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule (.*) http://www.dominio.com.br/$1 [R=301,L]
</IfModule>

A linha “RewriteEngine On” é a responsável por encaminhar as requisições ao mod_rewrite, enquanto a linha “RewriteRule (.*) http://www.dominio.com.br/$1 [R=301,L]” explica o que deve ser feito.

Apesar de parecer estranha à primeira vista, ela segue na verdade uma lógica bastante simples. O “(.*)” cria uma regra de encaminhamento, que será aplicada a qualquer URL dentro do domínio. A página especificada pelo visitante ao acessar o site vira uma variável ($1), que é então usada no parâmetro seguinte, o “http://www.dominio.com.br/$1” onde é indicado o novo domínio do site.

Com isso, se o visitante tentar acessar o “http://dominio.provedor.com.br/produtos/index.php?id=312” do exemplo anterior, a variável “$1″ será carregada com o valor “produtos/index.php?id=312″ e ele será encaminhado ao “http://www.dominio.com.br/produtos/index.php?id=312“. O mesmo se aplica a qualquer outra URL que ele vier a tentar acessar.

Concluindo, o “[R=301,L]” é o código de retorno que será enviado ao cliente. No caso estamos usando o código 301, que é o código de redirecionamento permanente. Além de encaminhar os visitantes, ele faz com que o Google indexe a nova página e transfira o pagerank da página antiga para ela. Normalmente, a atualização do pagerank demora cerca de 3 meses, mas depois de feita a atualização o novo endereço deverá receber o mesmo pagerank do antigo.

Outro uso comum para o mod_rewrite é a simplificação dos links, transformando URLs de páginas dinâmicas, como, por exemplo, “http://www.dominio.com.br/produtos/index.php?id=312” em URLs mais simples, como “http://www.dominio.com.br/produtos/312/” ou “http://www.dominio.com.br/312.htm

Nesse caso, criamos regras do rewrite que o orientam a detectar acessos à URL simplificada e encaminhar as requisições para a URL “real” de forma transparente, novamente através do uso de variáveis.

Para converter as URLs do formato “http://www.dominio.com.br/index.php?id=numero” para “http://www.dominio.com.br/numero/”, você usaria o seguinte modelo de arquivo .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule (.*)/$ /index.php?id=$1
</IfModule>

Com isso, ao acessar o “http://www.dominio.com.br/512/“, por exemplo, o visitante veria a página “http://www.dominio.com.br/index.php?id=512“, o que mascara a complexidade da URL. Se você preferir que os links abreviados tenham a aparência de páginas com extensão .htm, em vez de pastas, o arquivo .htaccess ficaria:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule (.*)\.htm$ /index.php?id=$1
</IfModule>

A mesma regra pode ser aplicada também a pastas específicas. Se você quiser que ela se aplique apenas à pasta “produtos”, sem ser aplicada a outras pastas do servidor, por exemplo, você poderia usar uma regra como:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule /produtos/(.*)\.htm$ /produtos/index.php?id=$1
</IfModule>

É possível também usar diversos parâmetros simultaneamente, facilitando o acesso a URLs que incluam um grande volume de argumentos, como em “http://www.dominio.com.br/index.php?cat=produtos&cat=info&id=23“, desde que você consiga bolar um formato de URL que permita incluir todos os parâmetros necessários, como em:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule (.*)/(.*)/(.*)/$ /index.php?cat=$1&cat=$2&id=$3
</IfModule>

Com isso, os três parâmetros que precisam ser incluídos na URL são digitados pelo usuário na forma de uma sequência de subpastas, como em “http://www.dominio.com.br/produtos/info/23/” e o mod_rewrite converte automaticamente as URLs ao formato usado pelo servidor.

À primeira vista, pode parecer uma mera mudança cosmética, mas o uso das URLs amigáveis facilita bastante a navegação do visitante e pode ajudar até mesmo na indexação por parte dos mecanismos de busca.

Fonte: http://www.gdhpress.com.br/

Nenhum Post Relacionado.

Artigos parecidos fornecidos por Yet Another Related Posts Plugin.

Tags: , , , ,

Uma Resposta to “Regras de mod_rewrite”

  1. Fabio

    olá, ótimo artigo, cada vez mais o mod_rewrite tem sido útil em aplicações. Gostaria de saber se é possivel e como fazer para utilizar mais de uma regra no mesmo .htaccess, e possivel?
    tentei utilizar 2 regras diferentes, aí a primeira deixa de funcionar. Grato. [ ]s

    Current score: 0
    #42

Deixe uma Resposta