Picotando e maquiando URLs

Seu site funciona na base do index.php?idpag=23&idproduto=343 ? Cada vez que você vai passar um URL você tem que explicar o que é a “?” e esses id* da vida?

Acabe com isso, facilite a vida do seu usuário e aumente até o acesso ao seu site com uma simples solução, mod_rewrite. Veja como implementar este módulo do Apache em seu servidor, neste post.

Esta semana foram lançados os Blogs do site ComuniWEB, e com eles um desafio do passado voltou a tona. Como o site é base para um jornal impresso com alguma frequencia procuramos fazer uma ligação chamando a atenção do leitor para o site. No passado isso era feito passando um longo URL “index.php?idpaginas=20&idmaterias=123456”, mas isso é um grande problema pra que lida no dia a dia com usuários leigos que nao entendem o que esta informação significa.

Mesma coisa com os blogs, acessar um endereço do tipo “blog.php?id=fulanosilva” não é nada intuitivo, imaginem acessar os posts antigos deste blog sem usar os conhecidos “permalinks”. A navegação se torna muito mais intuitiva, gerando mais acessos e melhorando o entendimento de logs de acesso.

O processo é simples (agora que consegui enteder :D) você habilita o mod_rewrite, determina as condições e por fim determina como deve ser re-escrito o URL. Claro que na teoria tudo é lindo e fácil, na prática o trabalho sempre é maior.

Primeiro verifique se seu servidor possui o mod_rewrite habilitado no Apache: use um phpinfo(); e verifique a linha “Loaded Modules” da configuração Apache. Caso esteja habilitado podemos seguir em frente, como ilustração vamos desenvolver o exemplo citado abaixo:

URL Original: http://www.domain.com/fulanodetal URL Final: http://www.domain.com/blog.php?id=fulanodetal

Desta forma o usuário terá uma forma mais rápida de acessar o blog de Fulanodetal.

O servidor deve estar configurado para aceitar arquivos do tipo .htaccess em diretórios, este arquivo permite setarmos configurações extras ou diferenciadas no Apache para esta pasta em específico. É neste arquivo que vamos carregar as configurações. Vou mostrar a estrutura final do arquivo e depois explicar cada pedaço.

Na linha 1 indicamos que nesta pasta devemos ativar o mod-rewrite. Nas linhas 3 e 4 setamos as condições onde a regra da linha 6 deve ser usada. Na linha 6 finalmente, falamos o que deve ser feito com a url.

Condições: Estas condições devem ser respeitadas para que a URL seja re-escrita, neste caso temos duas condições baseadas em flags do CondPattern. Nestas diretivas usamos uma syntaxe Perl de expressões regulares com algumas adições. O flag !-f se trata da negação do flag -f que indica se o “alvo” é um arquivo válido no servidor O flag !-d se trata da negação do flag -d que indica se o “alvo” é um diretório válido no servidor Com isso estabelecemos que se o URL aponta para algo que não seja um arquivo válido ou diretório, ou seja, algo que não existe no servidor, devemos usar a regra em seguida para re-escrever a URL.

Regras de re-escrita: O comando RewriteRule é o mais importante do grupo, é ele que efetua a re-escrita jogando os elementos nos seus lugares Neste caso usamos primeiro uma expressão regular para definir os trechos do nosso URL importantes. Quem já sou expressão sabe que cada texto compatível com uma expressão entre ( ) irá retornar como um item $1, $2 após aplicada a expressão. Sabendo isso podemos verificar que a expressão captura tudo que vai além do nosso url, pois o arquivo .htaccess esta na raiz de nossa estrutura de arquivos do servidor.

Pegando tudo que vai além do / em nosso exemplo pegamos fulanodetal e em seguida a expressão mostra onde isso será usado concatenando “blog.php?id=” com $1 (o primeiro match da expressão, fulanodetal). e finalmente após a expressão temos FLAGS especiais, sempre entre [ ] que indicam várias regas, neste caso L significa que está é a última regras a ser aplicada, pulando com isso qualquer outra coisa que estiver no arquivo.

De uma forma geral esta é a estrutura do mod_rewrite, os comandos possuem ainda uma vasta gama de flags e condições que podemos usar, verifique abaixo alguns links que podem ajudar:

Cheatsheet: http://www.ilovejackdaniels.com/apache/mod_rewrite-cheat-sheet/ Documentação oficial: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html Ferramenta para escrever regras de re-escrita (Wizard) http://www.mod-rewrite-wizard.com/

comments powered by Disqus

Related Posts

20 Years of PHP, and how I got on this train

20 Years of PHP, and how I got on this train

  • June 8, 2015

PHP, the most loved and hated language on the internet turns 20 today, 20 years ago Rasmus released Personal HomePages to the public , what happened next will blow you away™.

Read More
Novas do Google

Novas do Google

  • July 8, 2006

Quem trabalha ou convive comigo já esta acustumado a ouvir “google is god” ou “google vai dominar o mundo”.

Read More
Book Review: Guide to Date and Time Programming

Book Review: Guide to Date and Time Programming

  • July 6, 2009

This review has been pending for a while, but recently I finished reading Derick Rethans’ book: Date and Time Programming.

Read More