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.
É 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!
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!
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 ^^
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. ;)
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…
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?
AMigo, nao manjo muito
pode me ajudar, eu consigo deixar link do artista link amigavel
me add no msn djthoty@hotmail.com
vlw
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?
Ah tem mais uma coisa:
No exemplo deste tutorial, só incluía html, nada de PHP oO
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.
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?
Vlw galera, já resolvi o problema nesse fórum
http://www.codigosnaweb.com/forum/
Diego, é tranquilo, tente algo como:
RewriteRule ^analise\/?([0-9]+)\/?$ analise.php?id=$1
Tyler, presta atenção no artigo, LEIA. O que voce quer tem na funcao.php
James, testa em um servidor linux, apache com mod_rewrite ativo.
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 :)
muito obrigado! a melhor explicação que encontrei!
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
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?