Criando URLs amigáveis com .htaccess e PHP
Autor: Kevin Luzetti | Publicado: 2013-01-02T07:43:00-08:00

URLs amigáveis contribuem para um melhor posicionamento nos motores 
de busca, e como o próprio nome diz são mais fáceis de serem assimiladas
 pelos usuários, as pessoas &nbsp;já podem ter uma noção do assunto da página
 simplesmente lendo seu endereço, vejam um exemplo:
Essa URL:
http://exemplo.com/index.php?&amp;produto=456&amp;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&nbsp; com dois tipos de URLs amigáveis com base no Flickr e Twitter.
URL amigáveis 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
&nbsp;
//usando URL com dois parâmetros (uma string e um int)
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)$ users.php?user=$1&amp;page=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/$ users.php?user=$1&amp;page=$2



URL Original
http://flickr.com/users.php?id=username&amp;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_-]+)” &nbsp;separada por barras “/” para especificar suas variáveis.
Nota: É&nbsp;possível&nbsp;adicionar facilmente&nbsp;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]+)/$ &nbsp;ficaria ^([a-zA-Z0-9_-]+).html$ 

URL amigáveis 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 
&nbsp;
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&nbsp;básico para criação de uma URL amigável&nbsp;é montar 
a&nbsp;expressão&nbsp;regular que vai receber o parâmetros&nbsp;passado pela URL e 
repassar para o endereço real do script PHP que estará especificado 
dentro do&nbsp;.htaccess, de começo&nbsp;pode parecer meio complicado, mas depois 
que você pegar “as&nbsp;manhas” verá que não é tão&nbsp;difícil&nbsp;assim.
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/$ users.php?user=$1&amp;page=$2
É
 importante observar que todos os parâmetros necessários para&nbsp; 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&amp;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 '',
&nbsp;
)



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&nbsp; 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.
Leia mais em: http://rotinadigital.net/wordpress/urls/#ixzz2GpizWXNj
Under Creative Commons License: Attribution Non-Commercial