Objota O mundo orientado a objetos

URL amigável com htaccess

Posted on dezembro 26, 2010

Neste artigo vamos entender um pouco sobre a técnica de reescrita de url para torná-las “amigáveis”. Tudo isso através de configurações no arquivo .htaccess, um arquivo de configuração que serve, entre outras coisas, para mascarar URL’s. Fazendo bom uso deste arquivo de configurações podemos transformar url’s complexas e ilegíveis no que chamamos de: url’s amigáveis. Essa técnica é uma das primeiras a ser mencionada quando se ouve a sigla SEO, pois através dela é possível ganhar pontos com motores de busca como Google, Yahoo, Msn e etc.

Rewrite Engine

Um comando de configuração do arquivo htaccess. Como isso é possível? Simples. Na prática o responsável por mascarar a URL é o servidor web. O servidor Apache, pioneiro nesta técnica, implementa um módulo Mod_Rewrite, responsável pelo processamento das urls mascaradas.

O que eu ganho com isso

  • Como dito antes, facilidade na indexação de informações por motores de buscas.
  • A url se torna amigável e de fácil leitura para leitores humanos.
  • E segurança fazendo bom uso das expressões regulares é possível evitar SQL Injection.

Qual é a importância

Todos os motores de busca, ao indexar uma página web, avaliam o conteúdo da página, as palavras chave, e entre outras coisas, as URLs. Em geral ele avalia se as palavras encontradas no conteúdo e vai contando os pontos. Caso haja uma coerência entre todo o conjunto a página ganha pontos na indexação.

No caso dos motores Google, existe toda uma documentação listando uma série de recomendadas a serem seguidas para uma melhor indexação. A real técnica de avaliação é desconhecida, neste caso para eles o segredo é a chave para o sucesso.

Primeiros passos

Se você vai testar em seu serviço de hospedagem ou em um localhost não precisa se preocupar, pois praticamente todos os servidores já possuem o Mod_Rewrite abilitado. Por isso não abordarei como ativá-lo, mas para os curiosos segue o link: Como ativar o Mod_Rewrite do htaccess.

Vamos então direto ao assunto de como reescrever urls, primeiro vou descrever as linhas para depois abaixo visualizar todo o conjunto.

RewriteEngine on
Este comando ativa o modulo de reescrita do apache.

RewriteRule [expressão de mascaramento] [endereço real]
Este comando é quem realmente mascara uma url. Ele filtra requisições através da expressão regular empregada e aponta o requisitante para o endereço real do arquivo.

Obs: O endereço real ainda pode ser requisitado em qualquer momento.Pois ele só foi mascarado e não bloqueado, ou seja, ele só não é “conhecido”.

^
Este circunflexo indica o início de uma expressão regular.

^carro
Casa com qualquer coisa que comece com a palavra carro

$
Este indica o fim de uma expressão regular.

carro$

Casa com qualquer coisa que termina com carro.

Vamos então imaginar agora um arquivo php, que ao receber uma variável via url possa então printar na tela o seu conteúdo. O nome da variável é indice.

Vejamos então como seria.


<?php

if($_GET['indice']){
	echo $_GET['indice'];
}

?>

O nome deste arquivo seria então: arquivo.php

Salve este arquivo na raiz de seu  htdocs e lá mesmo crie um arquivo .htaccess (exatamente como está descrito, sem extensão nem nada). Uma curiosidade a respeito é que no sistema operacional LINUX o “ponto” na frente de um nome de arquivo significa que ele é oculto. Ele pode ser criado mesmo sem conteúdo com o bloco de notas. Certifique-se de que realmente seja um arquivo htaccess e não um arquivo de texto.

Vejamos o primeiro exemplo

RewriteEngine on

RewriteRule ^reescrita\/(.*)\.html arquivo.php?indice=$1

Este primeiro exemplo faz o seguinte. Ele recebe uma requisição qualquer e pega o conteúdo da variável $1 e joga na variável indice, que é passada via get para o arquivo php. Que por sua vez printa o conteúdo da variável na tela.

Mas o que existe na variável $1. Este sifrão seguido por um número indica que seu conteúdo é o resultado do processamento da primeira substring da requisitada. Ou seja, tudo o que vier dentro dos parênteses será repassado para ela.

Agora vejamos a expressão empregada neste caso era esta: (.*)

Os parênteses representam a substring e o “ponto e asterisco” são a expressão regular. Este comando aceita qualquer tipo de entrada: Letras, números, caracteres especiais e etc. Porém é possível barrar este tipo de entrada.

Mas antes disso, faça uma requisição para a seguinte url e veja o resultado:

http://localhost/reescrita/mariazinha.html
faça as devidas correções caso seja necessário.

Se tiver reparado no resultado vai ver que “mariazinha” foi printado na tela. Logo então faça isso pelo seu endereço real:
http://localhost/arquivo.php?indice=mariazinha

E verá que o resultado é o mesmo, porém não com a beleza e organização do primeiro. Basicamente foi isso que foi feito. Pegamos mariazinha de uma substring da expressão regular e jogamos na variável indice passada via get.

Segundo Exemplo

Existem milhares de possibilidades. Porém vejamos outro exemplo. Suponhamos que agora o conteúdo da variável indice precise ser necessariamente um número. Pois este número deve fazer referência a um índice primário de um registro em meu banco de dados.

RewriteEngine on

RewriteRule ^reescrita\/([0-9]+)\.html arquivo.php?indice=$1

Com este exemplo eu exigi que o conteúdo passado fosse um número, caso não obedeça a estes parâmetros a página será dada como não encontrada.

Vejamos o resultado.

Digitando o mesmo:

http://localhost/reescrita/mariazinha.html

e agora com

http://localhost/reescrita/23.html

Se tudo correu bem o segundo exemplo, com um número, teve sucesso e printou na tela o número fornecido.

Considerações finais

Bom este foi um breve tutorial de como se utilizar de urls amigáveis, para principalmente melhorar o seu SEO. Se você possui um blog como o wordpress ele possibilita fazer o mesmo através dos permalinks, é fato que ele coloca uma interface entre você e o htaccess mas este tipo de configuração existe.
Se você mesmo possui um site que ao gerar conteúdo,e gera evidentemente  seus próprios links, veja uma dica. Ato praticado por muitos que prezam pelo SEO de seu site.

Ao invés de possuírem links extremamente complexos com números letras caracteres ilegíveis apelam para a simplicidade de passar os IDs e o título do conteúdo.

Como seria isso:

Titulo: A escola de Mariazinha

Pode ser virtualizado em:

a-escola-de-mariazinha

Assim podendo ser empregado desta forma

URL: http://www.meusite.com.br/23/a-escola-de-mariazinha.html
Expressão: ^([0-9]+)\/(.*)\.html$ arquivo.php?indice=$1
ou
URL: http://www.meusite.com.br/a-escola-de-mariazinha-23.html
Expressão: ^(.*)-([0-9]+)\.html$ arquivo.php?indice=$2

Sendo que o número 23 poderia ser o id deste registro ou de sua categoria, depende muito de como funciona a arquitetura de seu site.

Mas se atente no fato de que isso torna sua url extremamente coesa, pois carrega em si o próprio título do artigo. E se atente também para o fato de que para alguns isso é o mínimo de SEO que poderia ser empregado em um site que busca ser bem indexado.

Finalizo então este artigo aqui. Segue uma referência para estudo de expressões regulares. Para melhor entender sobre o apache e o htaccess nada melhor que olhar um pouco sua documentação oficial.

Entendendo as Expressões Regulares

Porém, seguido deste artigo vou escrever outros que mostrarão mais possibilidades com o htaccess.

Essa foi minha dica. Qualquer dúvida poste aí.

Posted by Rodrigo Ireno

Comentários (4) Trackbacks (0)
  1. parabens muito Bom valew..

  2. Excelente, melhor tutorial pra iniciante que eu achei!

  3. como inverter a URL, passando valor do indice primeiro e jogar a reescrita depois ?
    mariazinha/reescrita

  4. Bom dia!

    Caso eu queira esconder os valores de variáveis na URL, tem algum mecanismo que posso utilizar para obter estes valores na página seguinte?


Leave a comment

Sem trackbacks