Apache, mod_rewrite e URL Amigável

7 11 2007

Apache

As Url´s Amigáveis, como simpaticamente chamam a técnica de Rewrite, viraram rapidamente o atrativo da bolha web 2.0 pelo fato de atrair mais usuários e ainda dar mais relevância ao seu conteúdo, mais o que tem de legal nisso tudo ?

http://www.site.com.br/index.php?artigo=25&cat=amor&dia=10

Você pode conseguir:

http://www.site.com.br/index/artigo/25/cat/amor/dia/10/
http://www.site.com.br/artigo/amor/dia/10/
http://www.site.com.br/Site-25-amor-10.htm

ou seja, cerveja (piada mal posicionada), você poderá manipular da forma que achar melhor a sua URL, mais qual o objetivo ?

Além de tornar mais “amigável” ao usuário isso facilita muito nos motores de busca, e normalmente um link desses atrai sempre mais visitantes.

Ao que interessa então:

mod_rewrite, como diz o nome re-write, reescrever, este modulo convete uma url em qualquer formato em um formato pré programado por voce.

Etapa 1 – Configuração

Verifique dentro do seu httpd.conf por:

LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c

Se os mesmos estiverem comentados (# na frente), descomente ambos (retire o #) e reinicie o apache.

No caso do Debian 4 Etch, as linhas em questão deverão estar em mods-avaliable/rewrite.load e ou .conf e veja se o link simbolico está criado em mods-enabled/ se não estiver criado basta criando então.

ln -s origem destino

Etapa 2 – Arquivo .htaccess

Nesta etapa deve-se criar o arquivo .htaccess (ex: touch .htaccess) se o mesmo já existir, apenas verifique as permissões dele de leitura e escrita

É interessante setar como grupo e usuario do arquivo os dados utilizados pelo apache,

Ex: chown www-data.www-data .htaccess (no caso de www-data ser o utilizado pelo seu apache)

Obs: O arquivo deverá ser criado ou deverá existir no mesmo local que foi definido no apache o DocumentRoot (diretório principal)

Etapa 3 – Criando sua Url Amigável

Passo a passo agora, a minha url em questão é:

http://www.site.com.br/index.php?artigo=25&cat=amor&dia=10

Agora sim, vamos editar o .htacess com seu editor preferido e inserir:

Options +FollowSymLinks
RewriteEngine on
RewriteRule Teste(.*)-(.*)-(.*)\.htm$ /index.php?artigo=$1&cat=$2&dia=$3

Complexo ? nada é até simples demais, vamos decompor:

Options +FollowSymLinks: A opção FollowSymLinks ativada determina que o Apache deverá solicitar o arquivo real do link simbolico que será criado, sem isso resultaria em um erro 505 (em alguns casos sem essa opção funciona mesmo assim pois não foi necessário a criação de links simbolicos).

RewriteEngine on: Ativa a engine (motor) do rewrite.

RewriteRule Site-(.*)-(.*)-(.*)\.htm$ : Esta parte é o fundamento do Rewrite, é a criação da regra que será utilizada na montagem da nova URL, nessa sentença podemos traduzir que a nova URL será montada da seguinte forma: Site-1-2-3.htm sendo 1,2,3 parametros de $ definido ao final, mais quem são esses parametros ? espera p****.

/index.php?artigo=$1&cat=$2&dia=$3 : Está parte trabalha em cima da nossa URL original, repare que a URL está sendo decomposta em parametros $1, $2, $3, isso mesmo, os mesmos que serão substituidos na abordagem anterior, simples demais, ah você quer colocar o dia como sendo paramêtro ? /index.php?artigo=$1&cat=$2&$3=$4 , resolvido basta agora alterar na URL de saída.

Finalizando, tudo isso irá gerar a URL

http://www.site.com.br/Site-25-amor-10.htm a partir de

http://www.site.com.br/index.php?artigo=25&cat=amor&dia=10

Isso é só o começo, da pra brincar muito no .htaccess e ainda tem muitos links legais por ai, confiram:

Gerador de .htaccess
Manual do mod_rewrite

Obs:  é .htaccess e não .htacess