Como fazer URLs amigaveis com .htaccess e php

junho 25th, 2009 by Diogo Dourado (XiS) Leave a reply »

Para quem não sabe o que é URL amigável vou explicar através de exemplo para evitar dúvidas.

URL Convencional: http://www.exemplodominio.com.br/noticia.php?id=1237
URL Amigável: http://www.exemplodominio.com.br/noticia/1237/

Viu a diferença? Além da vantagem de ficar mais elegante, facilita bastante a indexação dos mecanismos de buscas. Mas como fazer o controle de arquivos e identificadores? Então vamos aos códigos.

Primeiro você deve editar ou criar um arquivo .htaccess na raiz do seu site e inserir o código abaixo.

1
2
3
4
5
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(!.(\.gif|\.jpg|\.png|\.css|\.js|\.txt|\.php|\.htm|\.html)|.+[^/])$ /$1/ [L]
RewriteRule ^([^-]+)/$ /funcao.php?frase=$1&%{QUERY_STRING} [L]

A primeira linha linha é para ativar o módulo. A segunda e terceira linha é para ignorar arquivos e diretorios respectivamente. Na quarta linha ignora alguns tipos de arquivos. E finalmente na quinta linha, joga a string para um arquivo php qualquer, neste caso funcao.php.

1
2
3
4
5
$geturl = explode('/', $_SERVER['REQUEST_URI']);
if ($geturl[1] == 'noticia') {
    $id = $geturl[2];
    include noticia.php;
}

Interpretando rapidamente o código, a linha inicial captura a variavel gerada pela URL e usa a função explode para separar as palavras da URL.

Em seguida eu faço uma condicional IF para verificar se é noticia e setar o ID da mesma. Você pode incrementar como quiser o código e ter quantas palavras desejar na URL. Basta ter um pouco de criatividade.

Lembre-se, para funcionar o módulo apache Rewrite deve estar ativo no servidor Apache. Para maiores informações, procure a empresa de hospedagem do seu site.

Advertisement

19 comments

  1. Marta disse:

    É importante lembrar que o arquivo .htaccess precisa ter a permissão “444″ para que o site não dê erro 500.

    Muitos clientes de ftp re-atribuem a permissão para 644. Eu consegui mudando no gerenciador de arquivos, via painel de controle.

    Só complementando porque fiquei um certo tempo batendo a cabeça. Mas ótimo artigo! Vou usar algumas vezes, com certeza!

  2. Alexsandro disse:

    O problema chefe, é que todo mundo acha que todo mundo sabe fazer url amigáveis, seja mais específico, a minha pagína tem dezenas de links, como e o processo para mais de uma, e no link, o que escrevo em link, e no RewriteRule, lá é criado uma dessa para cada link, pow, tem que aprender a fazer um tutorial, no dia que eu souber como funciona exatamente, você verá como se escreve, estou a horas na internet e não tem ninguém que saiba explicar direto! Valeu assim mesmo!

  3. Matheus disse:

    O problema, amigo aí de cima… é que você deve estudar mais lógica de programação.

    Gostei do tutorial, muito funcional, porém não seria necessário criar um arquivo para tratar a url recebida, Tudo pode ser feito apenas no .htaccess explorando um pouco mais as expressões regulares.

    vlw ^^

  4. Matheus, o tutorial se destina a usuarios leigos em programação, principalmente se tratando de htaccess. Eu estudo sempre para me atualizar, valeu pela dica, mas da proxima poderia ser mais construtiva. Da proxima vez irei colocar uma ajuda á sua altura. ;)

  5. James disse:

    Fiz o tutorial, mas não deu certo, meu site tem exatamente este exemplo: noticias.php?id=111
    estou testando em localhost, e meu server apache esta habilitado… alguma dica…

  6. Rafael disse:

    Boa tarde, migrei meu site para url amigavel com htaccess e deu td certo, porém o google ja tinha indexado as urls antigas e agora está aparecendo na central de Webmaster do google um monte de paginas com meta tag title e description duplicados. Ex.:
    http://www.moteisehoteis.com.br/moteis/ e http://www.www.moteisehoteis.com.br/moteis.php. Alguém ja passou por isso e pode me ajudar?

  7. celso disse:

    AMigo, nao manjo muito
    pode me ajudar, eu consigo deixar link do artista link amigavel

    me add no msn djthoty@hotmail.com

    vlw

  8. Tyler disse:

    A configuração:

    # URLs amigaveis
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(!.(\.gif|\.jpg|\.png|\.css|\.js|\.txt|\.php|\.htm|\.html)|.+[^/])$ /$1/ [L]
    RewriteRule ^([^-]+)/$ /index.php?param=$1&uid=$2&type=$3

    A url: http://localhost/news/18/slideshow

    Como faço pra incluir um arquivo com include, ou selecionar dados do banco a partir das ids do segundo parâmetro?

  9. Tyler disse:

    Ah tem mais uma coisa:

    No exemplo deste tutorial, só incluía html, nada de PHP oO

  10. Diego Pettengill Fernandes disse:

    Cara, seguinte…. eu to começando a estudar url amigavel….htacess e tudo mais.
    preciso direcionar isso /analise.php?id=1 para por exemplo analise/1. Agradeço se puder dar uma força.

  11. João disse:

    Não sei se aqui pode postar dúvida.

    É o seguinte, eu uso URL amigáveis da seguinte forma:

    RewriteRule ^([a-z,0-9,A-Z,_-]+)\/([a-z,0-9,A-Z,_-]+)$ /forum/viewforum.php?f=$2

    Isso é usado em um fórum phpBB3

    Ele cria um link, tipo:

    http://www.site.com/assunto/1/2

    Só que acontece o seguinte: O link é criado sem problema, mas, pelo log de erro do meu cPanel, ele interpreta como se assunto fosse uma pasta, ou seja, um visitante entra em uma página e o servidor achar que esse link é uma pasta, como não encontra a pasta retorna erro. Alguém sabe como resolver?

  12. João disse:

    Vlw galera, já resolvi o problema nesse fórum

    http://www.codigosnaweb.com/forum/

  13. Diego, é tranquilo, tente algo como:
    RewriteRule ^analise\/?([0-9]+)\/?$ analise.php?id=$1

  14. Tyler, presta atenção no artigo, LEIA. O que voce quer tem na funcao.php

  15. James, testa em um servidor linux, apache com mod_rewrite ativo.

  16. Fábio José disse:

    Sr. Matheus, se você acha que não esta bom então posta você mesmo o seu código! Não desmotiva aquela pessoa que só esta afim de ajudar. Obrigado Diogo :)

  17. brayan disse:

    muito obrigado! a melhor explicação que encontrei!

  18. Olá, estou tendo dificuldades p/ fazer a url amigavél
    .htacess
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(!.(\.gif|\.jpg|\.png|\.css|\.js|\.txt|\.php|\.htm|\.html)|.+[^/])$ /$1/ [L]
    RewriteRule ^([^-]+)/$ /index.php?param=$1&uid=$2&type=$3

    como devo fazer a chamada no link Quem somos

    desde já agradeço, fico aguardando uma ajuda

  19. Junior disse:

    Galera, tenho uma url assim: http://localhost/learnenvironment/rewrite/qualquercoisa

    Sendo que quando chamo pelo navegador com o objetivo de chamar só a página qualquercoisa, não consigo … alguém pode ajudar?

Deixe uma resposta