Quinta-feira, 26 de Abril, 2007 | 14 comentários | 
Mais uma dica rápida da série dia-a-dia de um desenvolvedor Web. Agora se tratando de um módulo do Apache: mod_rewrite.
A idéia da dica, é fornecer uma regra simples sem níveis de seção na URL.
É um módulo escrito para o servidor Apache, responsável pela reescrita de URLs em páginas Web.
Hoje em dia, com a popularização de assuntos como SEO, usabilidade e acessibilidade, esta prática se tornou comum e está cada vez mais sendo utilizada por grande portais.
Antes de mais nada, para que o módulo mod_rewrite funcione, obviamente você deve ter configurado e ativado no seu servidor Apache.
Crie um arquivo com o nome ".htaccess" (exatamente desta forma), e mova para a pasta raiz do seu domínio (ou onde queira implantar a reescrita). Em seguida, insira o código abaixo:
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php?cod=$1
Entendendo o código:
Na prática, se você tem uma URL do tipo www.url.com.br/secao/subsecao/, será interpretada por www.url.com.br/index.php?cod=secao/subsecao/. E mais, você não terá limite de níveis para utilizar com as /.
Com seu arquivo de reescrita criado, você já pode criar uma lógica no seu arquivo PHP para que interprete e leia as URLs passadas.
Veja um exemplo auto-explicativo:
<?php
/*
* separa a URL por "/" e insere num vetor (array)
*/
$url = explode('/', $_GET['cod']);
/*
* imprime a string passada após a primeira /
* no exemplo acima, seria: secao
*/
echo $url[0];
/*
* imprime a string passada após a segunda /
* no exemplo acima, seria: subsecao
*/
echo $url[1];
?>
Desta forma, você pode utilizar includes para suas seções, ou qualquer outro tipo de inclusão, uma vez que você já tem suas seções separadas.
Para quem quer ler mais sobre o assunto, recomendo a documentação do mod_rewrite. O Bruno também escreveu mais detalhadamente aqui e aqui.
Até a próxima dica da série dia-a-dia de um desenvolvedor Web...
Eu também já escrevi sobre URLs amigáveis lá no blog. O Wordpress usa algo parecido com o que tu colocaste aí, né?
Abraços
Sem dúvida utilizar isso hoje em dia tem se tornado indispensável.
No meu site explico como configurar e ativadar o mod_rewrite no Apache.
http://www.brunnolou.com/blog/activar-mod_rewrite-no-ubuntu/
Ciro
Muito boa a explicação. Deu para entender muito fácil como usar o mod_rewrite (que muita gente até usa, mas não sabe como nem porquê.)
Realmente o wordpress usa essa \\\'tecnologia\\\', mas ele não explica em miúdos como faz isso, apenas manda renomear o htaccess.txt.
[]´s
Muito boa essa forma, valeu ai Ciro!
Olá Ciro,, parabéns pelo artigo, realmente as URL amigaveis ajudam muito no indexamento dos Sites juntos ao sites de buscas.
Att
Rinaldi Fonseca
www.grifemidia.com.br
Poxa, até que enfim um ótimo tutorial sobre URL Amigaveis !!
Muito bom mesmo Ciro !
Congratulation
[]´s
Ciro, legal o post, e apenas para complementar, as vezes é necessário configurar o apache para que ele entenda o .htaccess (em algumas instalações isso não está ativo por padrão), fazendo a seguinte configuração:
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
explode? ensinando pela forma noob é foda...
Realmente ajuda muito no SEO.
A um tempo atrás fiz um vídeo tutorial sobre o assunto, pra quem quiser ver, tá ai o link:
http://videotutoriais.blogspot.com/2007/08/url-aucarada-com-o-modrewrite-do-apache.html
Abraços
Olá Ciro,
muito bom.. agora só queria saber uma coisa:
Eu consigo usar esse mod para qualquer url ? Seria só tratá-la ?
Por exemplom, se eu tiver a seguinte url:
site.com/index.php?ir=teste&cat=noticia&id=id
ficaria
site.com/noticia/id
Pelo seu código é possível fazer isso ou teria que concatenar e especificar as sub-seções?
Vlw
abraços
Eu tambem tenha a duvida acima
@ Fillipe:
Conforme descrito neste artigo, qualquer string após o domínio será convertido em vetor no PHP, sendo "quebrados" após as barras "/".
Assim, se você tem a URL do tipo www.site.com.br/noticia/id, o script retornaria para você, o equivalente a:
$url[0] = 'noticia';
$url[1] = 'id';
Daí, basta realizar as suas críticas baseado nesses resultados ($url[0], $url[1]...).
Espero que tenha assimilado.
Abraço!
Boa Ciro...fiz um teste e já aprovei
![]()
Ciro, me diga tentei fazaer e deu certo mas as imagens somem, o que acontece será ?
As imagens que aparecem são Gravatars. Ao registrar um, sempre que comentar em algum blog que suporte essa funcionalidade, sua imagem aparecerá ao lado. Se você ainda não tem um gravatar, crie aqui.
English Version © Copyright 2004-2008 Ciro Feitosa - Todos os Direitos Reservados