em

Como criar URL amigável com PHP e .htaccess

Veja como criar uma URL amigável e entenda como ela pode contribuir para um melhor posicionamento nos motores de busca (SEO).

Como o próprio nome diz, as URLs amigáveis são mais fáceis de serem assimiladas pelos usuários, as pessoas  já podem ter uma noção do assunto da página simplesmente lendo seu endereço, veja um exemplo:

Essa URL:

http://exemplo.com/index.php?&produto=456&page=6

Poderia ficar assim:

http://exemplo.com/nome-do-produto/6

Neste post vamos explicar sobre técnicas de reescrita de URLs usando o módulo mod_rewrite e o arquivos .htaccess no servidor apache. Esse tutorial foi escrito originalmente por Srinivas Tamada de 9lessons com dois tipos de URLs amigáveis com base no Flickr e Twitter.

URL amigável estilo Flickr

URL amigável estilo Flickr

Observamos que existem dois parâmetros: “id=polvero” e “page=2” para alcançar este resultado, vamos adicionar o seguinte código em o nosso .htaccess:

//usando URL com um parâmetro (tipo string)
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ users.php?user=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ users.php?user=$1

//usando URL com dois parâmetros (uma string e um int)
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)$ users.php?user=$1&page=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/$ users.php?user=$1&page=$2

URL Original

http://flickr.com/users.php?id=username&page=2

URL amigável

http://flickr.com/username/2

No exemplo acima estaremos recebendo uma string e um numero como parâmetros, se quiser usar apenas palavras repita a expressão “^([a-zA-Z0-9_-]+)”  separada por barras “/” para especificar suas variáveis.

Nota: É possível adicionar facilmente extensões ao final de nossas URL amigáveis, por exemplo:

http://exemplo.com/loja/meuproduto.html

Basta acrescentar a extensão no final da expressão regular, veja:
^([a-zA-Z0-9_-]+)/([0-9]+)/$  ficaria ^([a-zA-Z0-9_-]+).html$

URL amigável estilo Twitter

URL amigável estilo Twitter

Olhando a imagem, percebemos que não pode haver um usuário “login”, “home” ou “terms”, isto é possível através de um filtro com palavras reservadas no momento da inscrição, para atingir o objetivo vamos combinar um pouco de PHP com o nosso .htaccess.

Código .htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?key=$1 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?key=$1

Código PHP (index.php)

switch($_GET['key'])
{
case 'home': include('home.php');break;
case 'login': include('login.php');break;
case 'terms': include('terms.php');break;
case 'users':include('users.php');breaak;
default: include('404.php');
}

O principio básico para criação de uma URL amigável é montar a expressão regular que vai receber o parâmetros passado pela URL e repassar para o endereço real do script PHP que estará especificado dentro do .htaccess, de começo pode parecer meio complicado, mas depois que você pegar “as manhas” verá que não é tão difícil assim.

RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/$ users.php?user=$1&page=$2

É importante observar que todos os parâmetros necessários para  realizar a consulta devem ser passados para seu script, vamos olhar novamente o exemplo do começo do artigo:

http://exemplo.com/loja/cgi-bin/index.php?produto=456&page=6

Para chegar no resultado esperado, nos teremos que passar os dois parâmetros (produto e page) dentro da URL, para poder fazer as coisas funcionarem corretamente.

Se você tiver a possibilidade de fazer modificações na estrutura do banco de dados, então podemos considerar a possibilidade de criação de um novo campo exclusivamente para guardar uma variável associada a nossa URL amigável:

CREATE TABLE IF NOT EXISTS `Produtos` (
`fieldID` bigint(32) NOT NULL auto_increment PRIMARY KEY,
`Quantidade` bigint(32) NOT NULL,
`Nome` varchar(255) NOT NULL default '',
`Descricao` varchar(255) NOT NULL default '',
`slug` varchar(255) NOT NULL default '',

)

Assim, agora também podemos consultar o produto pelo campo slug:

http://exemplo.com/index.php?slug=nome-do-produto

.htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?slug=$1

O resultado:

http://exemplo.com/nome-do-produto

Dica: É importante sempre usar os comandos RewriteCond %{REQUEST_FILENAME} !-f  e RewriteCond %{REQUEST_FILENAME} !-d, eles servem para evitar que as regras sejam aplicadas caso existam arquivos ou diretórios reais, com nomes iguais aos solicitados pela URL amigável. 

URL amigável e SEO

Junto ao título, meta-descrição e o conteúdo em si, os mecanismos de pesquisa usam o URL da página para entender do que se trata seu assunto.

Na verdade, os URLs são tão importantes que o próprio Guia de otimização de mecanismos de pesquisa (SEO) para iniciantes do Google dedica uma seção inteira a elas:

URLs amigáveis e SEO

One Ping

  1. Gostou dessa matéria?

    Inscreva seu email para receber atualizações com as últimas publicações do nosso blog.

  2. Pingback:

Deixe uma resposta