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

Aniversário do BlogBlogs!

Aniversário do BlogBlogs!

  • July 31, 2007

Hoje foi escolhido como aniversário oficial do Blogblogs, após uma breve discussão do Manoel Lemos, dono do site, com si mesmo .

Read More
Analisando a PHP Conference Brasil 2008 e slides da palestra

Analisando a PHP Conference Brasil 2008 e slides da palestra

  • December 3, 2008

Mais um ano e mais uma PHPConf , este ano uma nuvem de discussões e #mimimi rodeou a realização de todos eventos de PHP, mas acredito que o resultado final tenha sido positivo o bastante para deixar isto para trás.

Read More
Otimizando código com __autoload

Otimizando código com __autoload

  • January 10, 2007

O advento do PHP5 trouxe consigo outra ótima ferramenta para otimizar seu código, se trata do __autoload. Esta função pode reduzir o tempo perdido na hora de se incluir arquivos de objetos e classes em seu código. Mas como otimizar e criar uma função __autoload?

Read More