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 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?&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á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 //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 |
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á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 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?key=$1 |
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'); } |
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 '', ) |
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 |
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.
Leia mais em: http://rotinadigital.net/wordpress/urls/#ixzz2GpizWXNj
Under Creative Commons License: Attribution Non-Commercial
Postar um comentário