Ciro Feitosa

Blog

URLs amigáveis com mod_rewrite

Quinta-feira, 26 de Abril, 2007 | 16 comentários | Del.icio.us

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.

O que é mod_rewrite?

É 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.

Criando o .htaccess

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:

RewriteEngine On
Ativa o suporte à reescrita
RewriteCond %{SCRIPT_FILENAME} !-f
Não aplica a condição para arquivos
RewriteCond %{SCRIPT_FILENAME} !-d
Não aplica a condição para diretórios
RewriteRule ^(.*)$ index.php?cod=$1
Regra de reescrita onde qualquer string (.*) após a pasta, onde estiver o .htaccess, será interpretado por index.php passado na variável cod

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 /.

Interpretando com PHP

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


16 comentários

Gravatar para Rafael Marin#1 | Rafael Marin disse:

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 Smiley

Gravatar para brunnolou#2 | brunnolou disse:

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/

Gravatar para Israel Cefrin#3 | Israel Cefrin disse:

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.
Smiley
[]´s

Gravatar para Maicon Junches#4 | Maicon Junches disse:

Muito boa essa forma, valeu ai Ciro!

Gravatar para RInaldi Fonseca#5 | RInaldi Fonseca disse:

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

Gravatar para Túlio Vargas#6 | Túlio Vargas disse:

Poxa, até que enfim um ótimo tutorial sobre URL Amigaveis !!
Muito bom mesmo Ciro !
Congratulation

[]´s

Gravatar para André de Castro Zorzo#7 | André de Castro Zorzo disse:

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

Gravatar para Carlos La Vega#8 | Carlos La Vega disse:

explode? ensinando pela forma noob é foda...

Gravatar para Rodrigo Maia#9 | Rodrigo Maia disse:

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

Gravatar para Fillipe#10 | Fillipe disse:

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

Gravatar para CACA[COBRA]#11 | CACA[COBRA] disse:

Eu tambem tenha a duvida acima

Gravatar para Ciro#12 | Ciro disse:

@ 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!

Gravatar para CACA[COBRA]#13 | CACA[COBRA] disse:

Boa Ciro...fiz um teste e já aprovei Smiley

Gravatar para Vilson Carlos#14 | Vilson Carlos disse:

Ciro, me diga tentei fazaer e deu certo mas as imagens somem, o que acontece será ?

Gravatar para Ivan Gorski#15 | Ivan Gorski disse:

Muito bom Smiley Parabéns.

Gravatar para Leonardo Filipe#16 | Leonardo Filipe disse:

meu site fica dentro de /site

consegui fazer tudo certo mas as imagens, css e js quando ficam /ajuda/10/titulo
nao funciona só funciona quanto tem uma pasta tipo /ajuda

Deixe o seu comentário

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.





arrow exclaim question idea biggrin confused cool cry eek evil lol mad mrgreen neutral razz redface rolleyes sad smile surprised twisted wink




English Version © Copyright 2004-2009 Ciro Feitosa - Todos os Direitos Reservados