quarta-feira, 21 de maio de 2008

URL amigável

As Url´s Amigáveis, como simpaticamente chamam a técnica de Rewrite, viraram rapidamente o atrativo da web 2.0 pelo fato de atrair mais usuários e ainda dar mais relevância ao seu conteúdo e além do mais ajuda a esconder a tecnologia usada pelo seu site.

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.

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, lembrando que para criar o arquivo .htaccess complexos você deve ter o conhecimento sobre expressões regulares.

Arquivo .htaccess:



Options +FollowSymLinks

##liga motor de reescrita de URL
RewriteEngine on

##Regra para cair na index.php
RewriteRule index.html$ http://localhost/testes/index.php
RewriteRule index.htm$ http://localhost/testes/index.php

##Regra para cair na página categoria.php
RewriteRule categoria/(.*)$ http://localhost/testes/
categoria.php?categoria=$1

##Regra para cair na página busca.php
RewriteRule busca/(.*)/(.*)$ http://localhost/testes/
busca.php?data=$1&categoria=$2


Vamos ver oque significa esse código:

Options +FollowSymLinks: A opção FollowSymLinks ativada determina que o Apache deverá solicitar o arquivo real do link simbólico 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****.

busca/(.*)/(.*)$ http://localhost/testes/busca.php?data=$1&categoria=$2 : 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 ? busca.php?data=$1&categoria=$2, resolvido basta agora alterar na URL de saída.

Obs: O arquivo deverá ser criado ou deverá existir no mesmo local que foi definido no apache o DocumentRoot (diretório principal) e o nome do arquivo é .htaccess (tem que ser assim o nome do arquivo).

Etapa 3 - Criando sua Url Amigável
Quando se chama a url index.html ou index.htm o arquivo .htaccess direciona para a página index.php, conforme nossa primeira regra no .htacces:

##Regra para cair na index.php
RewriteRule index.html$ http://localhost/testes/index.php
RewriteRule index.htm$ http://localhost/testes/index.php


Arquivo index.php:


<html>
<head>
<title>Teste de reescrita de URL</title>
</head>
<body>
<div>
<a href="categoria/1">Categoria 1</a>
<br />
<a href="categoria/2">Categoria2</a>
<br />
<a href="busca/2008-01-12/1">Busca por data</a>
</div>
</body>
</html>



Se for chamada a página busca/"data"/"categoria" o .htaccess envia para a página busca.php passando também as variáveis por $_GET.

Arquivo busca.php:


<html>
<head>
<title>Busca - Verifica as variáveis passadas e se está funcionando a reescrita de URL</title>
</head>
<body>
<div>
<?php echo 'Categoria = '.$_GET['categoria'].
'<br />'.'Data = '.$_GET['data'].'
';?>
<a href="http://localhost/testes/index.html">Voltar</a>
</div>
</body>
</html>




Se for chamada a página categoria/"categoria" o .htaccess envia para a página categoria.php passando também a variável por $_GET.

Arquivo categoria.php:


<html>
<head>
<title>Categoria - Verifica as variáveis passadas e
se está funcionando a reescrita de URL</title>
</head>
<body>
<div>
<?php echo 'Categoria = '.$_GET['categoria'].'
';?>
<a href="http://localhost/testes/index.html">Voltar</a>
</div>

</body>
</html>



Gerador de .htaccess
Manual do mod_rewrite
Manual de expressão regular

Falou.
Abraços.

Nenhum comentário:

Postar um comentário