URLs para sites de busca utilizando mod_rewrite

PHPLinux
Enviado por macguyver em Seg, 21/11/2005 - 20:49.PHP | Linux

Todo mundo que já programou em PHP, ou mesmo qualquer outra linguagem voltada à Web, já deve ter se deparado com URLs do tipo:

http://www.site.com/produto.php?sub=telefonia&id=celulares&pagina=05

Isso gera 2 complicações:
1- é "feio" pro cliente uma URL cheia de caracteres que dificultam a leitura, e ainda reduz drasticamente a probabilidade de se memorizar a URL.
2- a maioria dos sites de busca não vão indexar essa página, eles ignoram a GET String e tentarão indexar somente http://www.site.com/produto.php portanto nao indexará seus produtos. (nota: eu *acho* que o Google agora indexa páginas assim, mas não tenho certeza)

Uma URL que resolveria ambos os problemas poderia ser escrita assim:

http://www.site.com/produtos/telefonia/celulares/05

Muito melhor, não é? E os sites de busca indexarão corretamente. Mas como fazer isso sem precisar criar todos os diversos diretórios?
Com mod_rewrite é simples:

Na raiz do site, crie um arquivo .htaccess contendo o seguinte:

RewriteEngine On
RewriteRule ^produtos/([a-z]+)/([a-z]+)/?([0-9]+)?$ produto.php?sub=$1&id=$2&pagina=$3

E é só! Todo accesso será redirecionado internamente pelo apache, de acordo com a expressão regular, sem o cliente notar. Nice, eh? ;)

Nota: Alguns hosts bloqueiam essa possibilidade (haja admin tosco nesse mundo). Outros, porém, simplesmente náo sabem como utilizar e deixam a configuração padrão. Para utilizar é necessário que o diretório tenha a opção "FollowSymLinks" habilitada, e, obviamente, que você tenha acesso a utilizar .htaccess, e RewriteRules dentro do mesmo. Em todo caso, é só uma questão de convencer o admin ;)

Nota2: Este artigo foi escrito com base no Apache 1.3 - a sintaxe das expressões regulares para o Apache 2.0 mudou (de POSIX para Perl).

Só. Chega, né? =)



Enviado por Assunção Jr. (não verificado(a)) em Ter, 22/11/2005 - 09:14.

Isto é muito interessante, o problema é os "melhores" host do Brasil não aceita esse tipo de configuração no .htaccess... Somente os hosts "fundo de quintal" é que aceitam...