Vejam o exemplo de uma url comum:
www.site.com/materia.php?id=125
Por meio dessa url o webmaster pode identificar facilmente que deve exibir nesta página a matéria de número 125, mas o problema é a dificuldade que os buscadores têm para indexá-la. Digo isso por experiência própria com este fato já notório na comunidade. Uma página que depende de argumentos não é indexada facilmente e, no geral, não alcança posições tão boas quanto poderia nos resultados das buscas.
A solução é migrar deste formato para um otimizado para buscadores. Existem diversos meios de se alcançar o mesmo resultado, mas vou ensinar aqui a técnica que oferece mais controle. Seu site precisa estar em um servidor web Apache (o mais comum) para utilizá-la.
Para não fazer um artigo gigante vou apenas exemplificar o processo de migração em um site fictício de exemplo. Vamos lá!
Sabemos que é preciso passar aquele número, 125, para sabermos qual matéria exibir. Então nós vamos deixar funcional a seguinte url, em substituição àquela:
www.site.com/materia/125/peixes_africanos
Essa url se reveste de duas vantagens: não passa argumentos da forma tão repudiada pelos buscadores e pode trazer o título da página na url. Este segundo elemento é apenas um adicional benéfico, mas não imprescindível. Se uma das palavras da busca for encontrada na url, seu site ganhará muitas posições.
Agora chega de introdução e vamos ao método em sí!
Você vai encontrar no diretório principal do seu site, seja o "public_html" ou "www" (o local onde estão suas páginas) um arquivo chamado ".htaccess". É isso mesmo, ele não tem nome, apenas extensão. Se não existir, crie este arquivo. Nele você deve escrever o seguinte:
RewriteEngine on RewriteRule !\.(gif|jpg|png|css)$ controle.phpSão apenas duas linhas. Se o arquivo já existir e houver alguma coisa nele, adicione estas linhas logo no início.
A primeira linha habilita o uso do "mod_rewrite" no seu site. A segunda direcionada todo o tráfego (com exceção de arquivos gif, jpg, png e css) para uma determinada página, neste exemplo, "controle.php".
Agora, se você digitar no navegador algo como:
www.site.com
www.site.com/nada
www.site.com/texto/semsentido
Tudo isso vai cair em "controle.php". Esta se tornou sua página mais importante e é ela quem vai tratar e direcionar todo o tráfego dentro do seu site, mas vamos fazer com que tudo isso aconteça apenas nos bastidores. O que faremos é usar a url digitada como se fosse uma string e extrair dela o que for útil. Veremos como escrever em "controle.php" um bom código de tratamento para podermos usar as tão almejadas urls amigáveis!
Nosso site exemplo tem matérias e notícias, e nós vamos utilizar ambos. As urls vão seguir o seguinte padrão:
www.site.com/materia/125/peixes_africanos
www.site.com/noticia/523/oceano_secou
Nós vamos aproveitar dessas urls apenas a seção (materia ou noticia) e a id (125 e 523, no caso). O resto (peixes_africanos e oceano_secou) está lá apenas para ajudar nas buscas e não será de serventia para o processo. Siga o modelo:
<?php // Capturamos a url digitada $url_site = $_SERVER['REQUEST_URI']; // Convertemos em array quebrando a string nos pontos certos $urln = explode("?", $_SERVER['REQUEST_URI']); $urlt = explode("/", $urln[0]); // Para manter a compatibilidade com as urls antigas, vamos // verificar existência do arquivo solicitado propriamente dito if(is_file($urlt[1])){ include($urlt[1]); exit(); } // Ja vimos que nao e um arquivo existente, entao prosseguimos // tratando a url digitada em forma de array $url=strip_tags($_SERVER['REQUEST_URI']); $url_array = explode("/", $url); // Excluimos o primeiro elemento, que sempre será vazio array_shift($url_array); // Se a array ficou vazia, mandamos ver no index.php if(empty($url_array) or $url_array[0] == ""){ include("index.php"); exit(); } // Se restou algo nela, vamos carregar o arquivo correto. // Adaptacoes possivelmente so precisarao ser feitas nesta // parte do código else { // Materia if ($url_array[0] == "materia") { // capturamos a id passada na url $id = $url_array[1]; // carregamos o arquivo real include("materia.php"); } // Noticia elseif ($url_array[0] == "noticia") { // capturamos a id passada na url $id = $url_array[1]; // carregamos o arquivo real include("noticia.php"); } // Se nao for nenhuma das opcoes acima, carregamos a index mesmo else { include("index.php"); } exit(); } ?>
Tá bom, o código está comentado mas merece alguma explicação. Apenas para ressaltar, se alguém estiver voando na leitura, isso é o que vai em "controle.php".
No início do código nós verificamos se existia o arquivo procurado na url, e neste caso carregamos ele. Isso para manter a compatibilidade com as urls que você já possui indexadas nos buscadores.
Passada esta fase, quebramos a url pelas barras ("/") existente e criamos um array que se parece com o seguinte:
www.site.com/materia/125/peixes_africanos
$url_array[0] = "materia"
$url_array[1] = "125"
$url_array[2] = "peixes_africanos"
Entretanto, só nos interessaram os dois primeiros elementos. Com eles carregamos o arquivo apropriado com base na leitura da url, no exemplo, "materia.php" ou "noticia.php", ambos existentes em nosso site fictício. No que se refere ao argumento, ou seja, a "id" da matéria ou notícia que vamos apresentar, perceba que colocamos esse dado na variável "$id". Bastará fazer a leitura dela onde for necessário.
Agora vamos saber o que muda no arquivo real que chamamos a partir do controle, ou seja "materia.php", "noticia.php" ou qualquer outro:
1) Perceba que você pode utilizar "$_GET['id']" apenas para manter a compatibilidade, porque se for uma requisição pela nova url, nós vamos pegar esse dado da variável chamada "$id". Então você vai verificar se existe algo em "$_GET['id']" e se não houver, fará o mesmo com a variável "$id", pois o argumento estará em um dos dois.
2) A segunda e última mudança diz respeito ao formato dos links para arquivos ou exibição de imagens. Nossas novas urls utilizam algumas barras, e isso indica mudança de diretório. Logo, precisamos voltar sempre à rais com uma "/" antes dos links. Observe os exemplos:
De: <a href="index.php">
Para: <a href="/index.php">
De: <img src="imagens/seta.gif">
Para: <img src="/imagens/seta.gif">
O método em sí está pronto! A intenção deste artigo não é fornecer um script milagroso que possa ser copiado e colado em qualquer site, pois isso seria utopia. O que forneço aqui é o conhecimento necessário para que cada faça a implementação da melhor forma.
Para conseguir esta última parte da url, por exemplo, basta fazer um tratamento da string trocando espaços por "_" e substituindo também a acentuação e os caracteres especiais.
www.site.com/noticia/523/oceano_secou
Use a criatividade. Você pode também criar urls assim:
www.site.com/noticia/523/oceano_secou.html
www.site.com/noticia/523/oceano_secou/oceano_secou.html
Isso porque as ferramentas de busca atribuem um peso diferente para as palavras encontradas na url em diretórios ou arquivos, e essa parte da url não será útil para o script mesmo.
Você deve trocar todos os links do seu site pelo novo formato para que surta efeito, e se quiser manter algum diretório sem o controle de url basta desativar o mod_rewrite criando nele um arquivo ".htaccess" com o seguinte conteúdo:
RewriteEngine off
Em caso de dúvidas ou dicas de melhorias sintam-se livres para postar neste tópico, o qual será aperfeiçoado ao longo do tempo com o surgimento de vantagens a serem acrescentadas no texto.
Flw!