Agora que já aprendemos regexp, podemos prosseguir para lições de importância maior. Como, por exemplo, como tornar sua URL mais elegante.

O objetivo básico do mecanismo de reescrita de URL é ter um endereço mais fácil de ser acessado e memorizado pelo seu usuário. Outro tópico importante, auxilia no indexamento de páginas por mecanismos de busca, e também no que se refere a estatísticas de site. E, bastante importante também, é fundamental para o melhor encapsulamento do seu sistema online.

Por exemplo, imagine um site de vendas. Quando o cliente clica no link par ver as informações do profuto 001245, o site abre a URL "www.vendas-online.com/index.php?produto=001245&modo=cliente". Como se pode ver a URL não é nada agradável, além de que revela alguma informação a respeito do mecanismo de funcionamento do site. E isso não é seguro. Além dessas duas razões, existe uma terceira razão para realizar a reescrita de URL: alguns mecanismos de busca, como o Google, ignoram os argumentos da URL na maioria dos casos, tornando a indexação do site menos eficiente.

Enfim, chega de papo e vamos à ação!


1 - Introdução

Inicialmente, temos que saber no que vamos mexer. Na raiz do site, assim como em qualquer pasta dentro da árvore indexada pelo Apache você pode adicionar um arquivo chamado ".htaccess". O ponto é fundamental, aliás. Este arquivo é usado automaticamente, mas pode-se redefinir o dito cujo para outro nome através das configurações do Apache. Mas não vamos mexer com isso no momento...

2 - Como a coisa funciona

Inicialmente, o arquivo .htaccess precisa conter uma linha fundamental para o funcionamento do mecanismo de reescrita:

RewriteEngine on
Esta linha define que o mecanismo de reescrita está ligado e funcionando a partir do momento em que o arquivo for salvo.

Agora, para a parte divertida: o núcleo da operação. Para cada reescrita desejada, temos uma linha da seguinte forma:

RewriteRule new.html old.html
O que essa linha faz, em termos técnicos, é substituir toda ocorrência de "new.html" por "old.html" e tentar acessar a URL resultante, relativa à raiz da URL do site. Ou seja, "www.vendas-online.com/old.html" na verdade direciona para a página "www.vendas-online.com/new.html", mas o usuário não sabe.

3 - Colocando a coisa em prática

Agora, vamos melhorar a URL do site de vendas. Queremos que, ao invés de acessar a URL original com os argumentos — e assim poder tentar quebrar a segurança do site, por exemplo mudando o argumento modo de "cliente" para "admin" —, o cliente acesse uma URL do tipo "www.vendas-online.com/produto/ID-do-produto". Para isso, usaremos a linha a seguir:

RewriteRule ^produto/([0-9]+)/$ index.php?produto=$1&modo=cliente
Vamos ver o que acontece quando o cliente acessa um link com o endereço "http://www.vendas-online.com/produto/001245/":

1- O Apache vai no .htaccess da raiz e lê as linhas de regras.

2- Examinando a regra, ele procura por ocorrências de "produto/" e um número de pelo menos um algarismo, seguido de mais uma barra. Ele encontra "produto/001245/", e salva o número "001245" como argumento 1.

3- O Apache então substitui a ocorrência por "index.php?produto=<argumento 1>&modo=cliente", ou seja, "index.php?produto=001245&modo=cliente"

4- O Apache responde ao cliente com a página desejada.

4 - Toques Finais

A coisa funciona! Auê!

Então, vejamos... o cliente resolve mandar um link para um amigo, mas escreve "http://www.vendas-online.com/produto/001245", sem a barra. O que acontece? O Apache não reconhece o padrão e retorna erro. Como resolver?

Simples. Conforme dito, mas não entrado em detalhes, ali em cima, o Apache examina as regras de cima para baixo. Tudo o que temos que fazer, então, é inserir mais uma regra:

quote:code RewriteRule ^produto/([0-9]+)$ index.php?produto=$1&modo=cliente
Assim, quando o Apache não reconhecer nenhum padrão na aplicação da primeira regra, tentará a segunda, e a coisa vai dar certo.

Além disso, veja bem: o primeiro argumento da linha RewriteRule é uma expressão regular. Tendo isso em mente, o céu é o limite em termos de reescrita de URL, incluindo reescrita de trechos apenas e muito mais! =D


Então, espero que esta aula tenha sido construtiva e algum dia vocês achem útil. Para outras informações no tópico de reescrita de URL, recomendo este site, que foi de onde aprendemos a usar o .htaccess para ser usado neste site! ^^

Sendo assim, até a próxima aula! Ou resenha... =D