mod_rewrite: A essência das URLs amigáveis, ou friendly URLs
Senhoras e senhores, apresento à vocês O Segredo!
Okay, estava brincando. Não estou falando do filme (ou livro, muito bom por sinal), mas sim do segredo das tão admiradas e famigeradas URLs amigáveis (friendly URLs).
Antes de mais nada, preciso informá-los de que existem inúmeras maneiras de se fazerem URLs amigáveis, mas a minha preferida (e a que eu acredito ser a mais adequada) é a que utiliza o mod_rewrite, no servidor Apache.
Seguindo com meu disclaimer pré-desembuchaissologo, também preciso avisar à todos de que, para que seja possível a utilização deste método, o mod_rewrite precisa estar habilitado no seu servidor. Se ele estiver em sua máquina, procure no httpd.conf a linha onde ele está declarado, e certifique-se de que a mesma não esteja comentada (se tiver um # no começo da linha, retire-o). Caso tenha modificado o arquivo, não se esqueça de salvar ele e reiniciar o servidor. Caso o seu servidor esteja na web, e seja compartilhado, é bem provável que ele já esteja com o mod_rewrite habilitado, caso não aí o negócio é um pouco mais complicado, mas uma boa conversa com o pessoal do host pode resolver o seu problema.
Ah! There’s one more thing! Para conseguir tirar o máximo proveito da técnica, é necessário um conhecimento no mínimo básico de expressões regulares, algo que todo bom programador deve tirar um tempinho para aprender.
Feito isso, podemos partir para a prática.
Peguemos uma situação hipotética, onde você tem um site institucional, que tem uma navegação baseada em includes php, a url para acessar a página de contato seria mais ou menos assim:
seusite.com.br/index.php?pagina=contato
Esta URL está um tanto feia. Não seria melhor da seguinte forma?
seusite.com.br/contato
Muito mais agradável, não?
Para fazer com que a URL funciona desta maneira, basta apenas criar um arquivo .htaccess (que permite que façamos configurações no Apache) dentro da pasta raíz do seu site, contento as seguintes informações:
RewriteEngine On
RewriteRule ^\/?([A-Za-z0-9]+)?\/?$ /index.php?pagina=$1
Okay, muito provavelmente quem não conhece expressões regulares não irá entender nada. Mas, de uma forma bem simples, na primeira linha estamos ativando o mod_rewrite para o local onde está o .htaccess, e na segunda estamos dizendo que qualquer caractere alfanumérico que estiver depois da barra no final do domínio, deverá retornar a url index.php?pagina=(o conteúdo alfanumérico encontrado).
Mas, e agora? E se eu tenho uma pasta dentro da raíz do site com os javascripts, outra com css, outra com imagens do portfólio, mais um arquivo que serve de include dentro do site, outro que retorna os ultimos posts do twitter, e por aí vai, e quero que estes arquivos sejam ignorados na hora de reescrever a url ?
Podemos adicionar uma simples condição, antes de definirmos a regra, deixando nosso .htaccess da seguinte forma:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^(index\.php|css|envia_contato\.php|portfolio\-images|twitter\.php|index\.html)
RewriteRule ^\/?([A-Za-z0-9]+)?\/?$ /index.php?pagina=$1 [L]
Como podem ver, não é nada de outro mundo, apenas dizemos quais as palavras que serão ignoradas, ficando dessa forma acessíveis normalmente como se o rewrite não estivesse alí.
Espero que este post tenha esclarecido algumas dúvidas de vocês a respeito de urls amigáveis e mod_rewrite. Qualquer dúvida que tenha ficado pode ser perguntada nos comentários do post, sem problemas
Novos screencasts e podcasts chegando em breve!
[]’s
Mais sobre isso na web...


