Rewrite URL – Reescrita de URL amigável para os mecanismos de busca
Existem várias formas de ajustar as URLs de forma que fiquem amigáveis aos mecanismo de busca como o Google.
Este tutorial ajuda o desenvolvedor à reescrever suas URLs (rewrite url) usando o arquivo .htaccess.
Utilizarei PHP com uma regra simples no arquivo .htaccess (para saber mais sobre este tipo de arquivo, joga no google)
O legal desses métodos de rewrite url é poder "Esconder" a tecnologia para os menos avisados e seu maior benefício mesmo já sabemos, refere-se à otimização para motores de busca, colaborando muito para o SEO aplicado em seu site.
Esse modelo de Rewrite URL abaixo é muito simples, mas muito funcional e prático ao mesmo tempo.
Faça assim no .htaccess
RewriteEngine On
RewriteRule !\.(jpg|jpeg|gif|css|swf|txt|js|png)$ index.php
/* Esta regra acima não reescreve tais tipos de arquivo,
ou seja, os tratara como de fato são */
Se tiver localmente testando, no conf do Apache defina AllowOverride como all
Se estiver em um servidor remoto, verifique se mod_rewrite está habilitado junto ao seu provedor de hospedagem ou verificando as infos do PHP instalado.
Bom até agora tudo normal... em outras palavras, no .htaccess está definido agora que todo o tráfego passa pelo arquivo index.php menos os arquivos do tipo dos listados na regra.
Vamos com um pouco de PHP agora.
Na index.php é feito os processos necessários, manipulação dos parâmetros etc.
Utilizei a função explode() do PHP para separar os parâmetros
Veja o exemplo abaixo:
Ruim -> www.target.com.br/?cat=php&tuto=cadastro
Bom -> www.target.com.br/php/cadastro/tutorial-cadastro-login
Obs.: Perceba que o terceiro parâmetro é um conjunto de palavras chaves para ajudar com os mecanismos de busca, estas palavras devem ser bem relacionadas ao conteúdo da página. Uma dica interessante é que esta url inteira pode ser armazenada em banco de dados tornando-se o link permanente da mesma, assim é certo que aquela página só será acessada se o endereço for exatamente o endereço da própria, evitando confusões dos mecanismos de busca classificando-a como conteúdo duplicado, pois é sabido que cada página deve ter seu endereço único.
Bom, explicar isso aqui poderá sair do foco, então vamos deixar para um outro tutorial ;)
Continuando...
$gets = explode("/", $_SERVER['REQUEST_URI']);
$gets = array_shift($gets);
$secao = (isset($gets[0])) ? $gets[0] : NULL;
$subsecao = (isset($gets[1])) ? $gets[1] : NULL;
// $secao = php
// $subsecao = cadastro
// brinco como eu quiser no terceiro parâmetro em diante...
switch($secao){
case "php" :
switch ($subsecao){
case "cadastro" :
//...
//...
//etc
Sendo assim posso manipular como eu quiser, mas até aí tudo bem, o interessante é que posso brincar com o último parâmetro, posso colocar qualquer coisa e depois manipular ou não (gravar em bd, etc).
Posso usar quantos parâmetros eu quiser, mas não recomendo usar muitos, pois poderia não ser classificado como ponto positivo aos mecanismos de busca e sim tratado como spam.
Obs.: usei o array_shift() para não precisarmos descartar o array[0], pois assim o que vier depois do www.teusite.com.br torna-se o array[0].
array_shift() - Recomendo a leitura desta função para maior entendimento do seu funcionamento.
Mais uma dica: Caso você queira que uma pasta não seja interpretado como um parâmetro...
Exemplo.: www.teusite.com.br/admin
... onde vc realmente quer que /admin seja interpretado como pasta, basta acrescentar dentro desta pasta um arquivo .htacces com uma única linha...
RewriteEngine Off
Nota: Uma dica que pode resolver problemas que possam vir a ter, veja bem, os arquivos listados na regra não serão tratados como parâmetros e as pastas que tiverem o .htaccess definido com RewriteEngine off também não, mesmo assim talvez venham a ter problemas com o caminho dos arquivos de imagens, js, css, enfim... todos listados na regra do .htacces, tipo imagens não serem exibidas e resultarão como quebradas, caminho errado, então o que digo para resolver isso é simples HTML:
Logo após a tag <head> defina a base para teu site.
Exemplo:
<head> <base href="http://www.sistemabasico.com.br" /> ... ... </head>
Espero ter ajudado, qualquer dúvida manda um comentário.


fevereiro 9th, 2011 - 23:40
Uso o wordpress, com um servidor windows.
Isso ira funcionar pra mim?
fevereiro 10th, 2011 - 00:46
Olá @xmaninho. Se você utiliza WordPress, esse tutorial não lhe ajuda em nada a não ser no sentido de aprendizagem. Pois a aplicação do rewrite que ensino neste tutorial não faz sentido no WordPress que já tem por padrão essa opção de URLs amigáveis.
Bons estudos!
fevereiro 10th, 2011 - 00:56
hun :D
Mas entao nao tem como eu tirar o index.php do meu site ?
no caso ( custanada.com/index.php/categoria/titulo-do-post
so quero apagar o index.php
quando tiro ele nos links permanentes o resultado é pagina nao encontrada :/
tem um solução?
fevereiro 10th, 2011 - 02:54
Olha só, solução existe pra tudo, mas esse tutorial não é para seu caso.
Se tentou utilizar, volte para o que estava antes por padrão do WordPress.
Fica a dica:
Acesse teusite.com/wp-admin/options-permalink.php e é ali que vc configura o formato da tua URL.
Para saber mais… MUITO mais sobre esse assunto em relação as URLs amigáveis do WordPress, acesse esse link abaixo e estude os diversos casos e utilize os ensinamentos que lhe for mais próximo ao teu desejo:
http://codex.wordpress.org/pt-br:Usando_Links_per…
Bons estudos ;)
fevereiro 9th, 2011 - 23:41
obs: Meu servidor nao possui apache;
fevereiro 10th, 2011 - 00:46
Respondi no seu comentário anterior.
;)
fevereiro 14th, 2011 - 12:28
Roberto,
como isso se comporta no post de form? Como deveria usar o action?
fevereiro 14th, 2011 - 15:17
Se comporta da mesma forma @Leonardo e o action="" deve apontar para o equivalente ao arquivo.
Por exemplo:
Eu costumo utiliza a condicional switch() e com isso pre determinar o caminho dos arquivos.
case 'contato' :
include 'contato.php';
break;
etc…
Desta forma se no action tiver 'contato' apenas, ele enviará os dados do form para o arquivo contato.php
Claro que para isso funcionar, deve acompanhar o tuto e dar atenção em como ensinei a recuperar os parâmetros enviados na url.
Bons estudos!
abril 16th, 2011 - 00:48
Ola amigo, achei bem interessante isto. Criei a 2 anos o site do curso da faculdade e hospedei no webnode.
Comprei o dominio http://www.aquiculturaufpr.com, e este ano, montei o meu site de vendas na Homehost, e tenho espaço ilimitado, assim criei uma pasta e instalei o site la dentro. O que preciso fazer é o seguinte, reescrever a URL http://www.utidainformatica.com/drupal/ (onde esta o novo site) para http://www.aquiculturaufpr.com
Deve ser muito facil, mas estou meio perdido, queria poder usar a hospedagem que ja possuo, e que apareça somente a url http://www.aquiculturaufpr.com
Ja redirecionei o DNS do dominio http://www.aquiculturaufpr.com para o destino correto e criei redirecionamento na hospedagem, se digitar http://www.aquiculturaufpr.com cai no lugar certo http://www.utidainformatica.com/drupal/
So falta saber como reescrever mesmo, desculpa ai o tamanho da explicação e se ficou confuso, se puder ajudar agradeço.
Abraço
abril 16th, 2011 - 02:59
Olá @Dirceu, um amigo meu a tempos atrás me mostrou algo que ele fez e sua pergunta me fez lembrar disso e perguntei pra ele novamente para dar uma relembrada e poder tentar te ajudar.
Veja bem: crie um arquivo .htacces e coloque dentro do www ou public_html do domínio http://www.utidainformatica.com (não na pasta drupal, mas na raiz do www ou public_html mesmo)
O conteúdo desse htacces seria mais ou menos isso:
RewriteEngine OnRewriteCond %{HTTP_HOST} ^(www.)?(aquiculturaufpr).com$
RewriteCond /home/teu_user/www/%2 -d
RewriteCond %{REQUEST_FILENAME} !^/home/teu_user/www/drupal
RewriteRule ^(.*)$ /%2/$1 [L]
Observação: altere ‘teu_user’ no cod acima pelo teu verdadeiro nome de usuário do domínio utidainformatica.com
Enfim… acessando http://www.aquiculturaufpr.com irá ser exibido o conteúdo que está em http://www.utidainformatica.com/drupal
Mas ainda falta algumas definições para que tudo isso funcione perfeitamente:
Onde vc registrou o domínio aquiculturaufpr.com vc deve definir a autoridade DNS os NSs 1 e 2 apontando para os mesmos NSs 1 e 2 do domínio utidainformatica.com
No painel de hospedagem do domínio utidainformatica.com, deve ter um lugar para você definir/adicionar os domínios que podem apontar para o teu site (utidainformatica.com), se não tiver como vc fazer essa adição de domínios permitidos para apontar ao teu domínio utidainformatica.com, aí não tem como… talvez só se vc pedir ao provedor de hospedagem ou trocar de hospedagem hehehe (se tiver usando o CPANEL fica simples de definir isso)
Era isso… espero ter ajudado. Pedi para o meu amigo dar uma revisada por aqui pra ver se pode incluir mais alguma coisa ou não.
Qualquer coisa fala aí.
Abraço e bons estudos.
maio 18th, 2011 - 11:06
Olá, muito bom o seu tutorial, poderia me tirar uma dúvida?
No teu caso ali, como fica as urls no index.php ou no menu?
Tipo no teu caso estaria algo ?cat=php&tuto=cadastro
Mas com esta regra aí do php, como eu faria os ?
Obrigado
maio 18th, 2011 - 12:40
Olá William, o link ficaria assim:
href="/php/cadastro" rel="nofollow"Observação: Não fiz a ancoragem do link como se deve, pois o sistema de comentários do WP muda tudo.
O ideal ainda seria usar o caminho completo:
href="teusite.com/php/cadastro" rel="nofollow"Os parâmetros você pega da forma que eu mostrei no exemplo em relação à variável $gets, usada para tratar o $_GET[]
Bons estudos!
maio 18th, 2011 - 13:15
Obrigado :)