Redirecionamento de URLs a buscadores para URLs com passo de parâmetros

Continuamos com o manual explicando um primeiro caso simples de redirecionamento de URLs amistosas a buscadores usando RewriteRule.

Por Miguel Angel Alvarez - Tradução de JML


Publicado em: 08/4/08
Valorize este artigo:
Agora veremos como realizar com htaccess umas regras de redirecionamento, das URLs pensadas para que estejam bem promovidas em buscadores para endereços que nos sejam fáceis de processar e manter com PHP.

Nota: Falamos de PHP porque estes truques com htaccess são para o servidor Apache e a linguagem de programação típico deste servidor web é PHP.

O arquivo htaccess é um arquivo de texto que se chama .htaccess, ou seja, seu nome começa com um ponto. Pode-se criar com qualquer editor de textos e se coloca no diretório onde desejarmos que afetem as configurações indicadas dentro do arquivo. Se o colocamos no diretório de publicação raiz do domínio, afetará a todos os diretórios do domínio, pois este arquivo modifica o diretório que o contém e todos os subdiretórios.

O mecanismo para criar uns redirecionamentos pensados para um melhor posicionamento em buscadores é o seguinte. No arquivo .htaccess se define uma regra de redirecionamento interno, com esta sintaxe:

RewriteRule url_padrao url_destino

RewriteRule é a instrução para definir um redirecionamento, que recebe dois parâmetros: url_padrao e url_destino. No primeiro se especifica uma URL padrão. Quando o redirecionamento ao qual se está cessando cumpre o padrão indicado em url_padrao, se redireciona internamente para a URL de destino url_destino. A página se processa no arquivo indicado em url_destino.

O padrão é uma expressão regular que corresponde com um conjunto de URLs possíveis. Quando o visitante tenta acessar a uma URL que cumpre essa expressão regular, internamente se processa a página através da url_destino. Dizemos que é um processo interno, porque ninguém se intera que a URL se está processando através de outro arquivo, pois o endereço que aparece no navegador sempre será o original e os buscadores não poderão detectar que Apache realizou um redirecionamento interno para processar a página.

Sendo assim, para os visitantes e os buscadores que indexem os conteúdos de nossa web, os endereços que estão acessando são os amigáveis para os buscadores, apesar de que na realidade esses documentos não existam dentro da estrutura de diretórios do servidor e o processamento real da página se realize em outra URL de destino.

Um exemplo de instrução RewriteRule poderia ser o seguinte:

RewriteRule ^artigos/(.+)\.php codigo/ver_artigo.php?nome=$1

Como se disse, a primeira parte é o padrão que deve se cumprir para que se realize o redirecionamento interno. Tal padrão é uma expressão regular que tem uma sintaxe especial.

Nota: A parte mais complicada do trabalho com RewriteRule de htaccess é justamente a criação das expressões regulares. Nós não vamos explicar neste artigo a criação de expressões regulares, pois é bastante complexa, porém realizaremos suficientes exemplos como para conhecer os casos mais típicos.

O endereço que se está acessando no servidor (URL) tem que concordar com a expressão regular para que se realize o redirecionamento. Na primeira parte da instrução RewriteRule do exemplo indicado anteriormente tínhamos esta expressão regular:

^artigos/(.+)\.php

Para explicar esta expressão regular creio que é melhor vê-la por partes.

A primeira parte seria "^artigos/". Isto quer dizer todas as URL que comecem por "artigo/" (a palavra artigo seguida de uma barra). O caractere ^ significa o começo de uma expressão.

A segunda parte é (+.). O "+" significa uma ou mais repetições de algo. O "." significa qualquer caractere, logo "+." significaria uma ou mais repetições de qualquer caractere, ou seja, qualquer conjunto de um ou mais caracteres. O parêntese serve para agrupar expressões. Logo veremos para que nos pode servir esse agrupamento.

Por último, na expressão regular temos "\.php". A contrabarra é um caractere de escape que serve para que o "." seguinte não seja considerado como qualquer caractere, e sim como um ponto sem mais. Então, isto quer dizer ".php".

Em conjunto a expressão regular significa qualquer coisa que comece por "artigos/", seguido de qualquer caractere ou conjunto de caracteres, seguido de ".php".

Com esta expressão regular concordariam URLs como estas:

artigos/oquefor.php
artigos/outra-coisa.php
artigos/1234-xx_zz.php

Dizíamos que a parte com o (+.) quer dizer qualquer caractere ou conjunto de caracteres. Ademais, com este "asterisco" se pode construir a url_destino. Observemos na segunda parte do RewriteRule:

codigo/ver_artigo.php?nome=$1

Simplesmente se indicou outra endereço onde há um arquivo PHP que vai se encarregar de processar todas as URLs que cumpram o padrão explicado anteriormente. Se observarmos, dentro da url_destino temos um $1. Esta variável se substitui pelo que havia dentro do (+.) indicado no padrão da expressão regular.

Por exemplo, uma url desta forma:

www.dominio.com/artigos/plantas-medicinais.php

Será processada no endereço:

www.dominio.com/codigo/ver_artigo.php?id=plantas-medicinais

Se observarmos, a URL de destino realiza o passo de parâmetros, para que todos os artigos se processem no mesmo arquivo, indicando no endereço algo que sirva para identificar inequivocamente o artigo que se deseja ver. Entretanto, esse passo de parâmetros se realizará internamente e de maneira transparente para o usuário que estará tendo a impressão que a URL que está processando é a original que escreveu na barra de endereços do navegador.

Como se pode ver, o $1, extraído da URL original na parte do padrão da expressão regular que se corresponde com o (+.), se utiliza para construir a URL que vai se encarregar de processar a página.






Usuários :    login / registro

Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato