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

PHP Community: Of Leaders, conferences and Union

PHP Community: Of Leaders, conferences and Union

  • February 24, 2012

Note: This article was originally published on the march/2011 issue of php-architect .

Read More
ZendCon '08 - Day One

ZendCon '08 - Day One

  • September 16, 2008

So its end of Day One here at ZendCon, let’s do a quick re-cap.

Read More
Productive Slacking

Productive Slacking

  • October 18, 2019

Back in 2016 I joined Usabilla, just around the time we were evaluating our work chat solutions.

Read More