Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala galera tudo certo?
Bem para quem não conhece esse conceito irei dar uma explicadinha aqui.
O que são URLs amigáveis?
São urls fáceis de se decorar e tbm algo mais legível para um bot de sistema de busca..
ex: de url amigável
http://www.seusite.com.br/artigos/show/33/php100erro.html
http://www.seusite.com.br/artigos/list/10/12/2005/all/php
Bem no 1° caso iríamos acessar o artigo e mostrar o conteúdo do artigo do id 33 e no 2° caso iríamos listar todos os artigos da seção PHP
Agora me fala uma coisa essas urls não são muito mais fácil de se ler do que isso:
http://www.seusite.com.br/?se=artigos&...=show&id=33
http://www.seusite.com.br/?se=artigos&...l&categ=php
Veja que isso fica cheio de coisas que para o usuário não é interessante.. e tbm complica a vida para se decorar algo assim.. fora que nos bot de buscadores isso para eles não é nada. Porque não é nada. nessa url ai ele interpreta como nada... já nos caso da URLs amigáveis é outra história..
No caso das URLs amigáveis ele vai ler parte por parte da sua url e fazendo assim um mapeamento de palavras chave então se você tem lá /artigos/ ele sabe que existe uma pasta em seu servidor que é referente artigos então na hora de encontrar algo sobre artigos no sistema dele ele vai dar mais relevância a sua pagina por conter uma pasta que pode haver o que você quer dentro dele.. Mais eu já vou avisando que não é só isso que faz seu site ficar entre os primeiros links há outras coisas por traz como por exemplo usar WebStandards que são a maneira correta de se usar as tags do HTML para se criar uma pagina
Bem chega de filosofia e bora a pratica :P/>
O que temos que fazer para ter essas urls amigáveis?
Antes de tudo vamos lembrar que isso só funciona com servidores APACHE ok?
Antes de mais nada verifique se no "httpd.conf" do APACHE o "mod_rewrite.so" sem espaços está habilitado ele provavelmente está assim:
#LoadModule rewrite_module modules/mod_rewrite.so
Se tiver descomente ele tirando o (#) da frente salve o arquivo e restarta o APACHE para que ele reconheça esse modulo
Bem para podermos criar essas URLs amigáveis temos que configurar a pasta onde queremos que nela se tenha essas urls achegáveis.. então iremos configurar um ".htaccess" sem (") nele temos que colocar o seguinte:
>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .(/)?$ /html/seuuser/www/index.php
</IfModule>
Vamos explicar o que está acontecendo aqui:
>
* Comentário
* verifica se o modulo rewrite está habilitado se sim executa o bloco dentro
<IfModule mod_rewrite.c>
* habilita o modulo Rewrite
RewriteEngine On
* Indica qual é a pasta base de todo o conteudo
RewriteBase /
* Verifica se a url digitada é um arquivo caso seja para aqui
RewriteCond %{REQUEST_FILENAME} !-f
* Verifica se a url digitada é uma pasta caso seja para aqui
RewriteCond %{REQUEST_FILENAME} !-d
* Mostra o caminho completo do meu arquivo index.php que caso nenhum desses comandos assim seja valido vai para ele.
RewriteRule .(/)?$ /html/seuuser/www/index.php
* fecha verificador
</IfModule>
* comentário
Bem até ai tudo certo Ok?Agora Salve o arquivo lembrando que onde você jogar essa arquivo todas as pastas depois dele terão essas configuração...
Bem crio o seu index.php e nele coloque algo como "Estou Na HOME"
Agora vamos testar para ver se está funcionando. Abre o seu navegador e teste colocando o seguinte.:
Vai mostrar Estou Na HOME
agora digite
http://www.seusite.com.br/teste
Vai mostrar Estou Na HOME
então já está funcionando.. a e lembrando que se existi-se essa pasta teste em seu servidor ele iria acessar a pasta normalmente sem problema algum ;)/>
Agora como podemos trabalhar com essas urls amigáveis? agora é no index.php que o negocio vai começar a ter vida.
Abra o index.php e vamos programar nele o seguinte.
>
<?php
#:: URL amigaveis
$gets = explode("/",str_replace(strrchr($_SERVER["REQUEST_URI"], "?"), "", $_SERVER["REQUEST_URI"]));
?>
O que temos ai?Nessa linha ele está recuperando um array do conteudo depois do http://www.site.com.br/->aqui então imagina que você digito...
http://www.seusite.com.br/teste/meu
ele vai retorna um array assim
>
array(
"",
"teste",
"meu"
)
Então você já tem todas as partes da url certo então vamos dizer que essa url abaixo acessa a seção artigos
http://www.seusite.com.br/artigos
quem ver essa url pensa que é uma pasta artigos que há em seu servidor mais na verdade não é claro que se haver uma pasta artigos ele irá entrar na pasta
Quando recuperamos isso termos o seguinte:
>
array(
"",
"artigos"
)
Então vamos dizer que temos o arquivo chamado artigos em nosso servidor dentro da pasta includes/ e ele é responsável pela configuração da sessão artigos como funções métodos dentre outras coisas.
ai faríamos o seguinte:
>
<?php
#:: URL amigaveis
$gets = explode("/",str_replace(strrchr($_SERVER["REQUEST_URI"], "?"), "", $_SERVER["REQUEST_URI"]));
#:: Elimita o 1° tem da array que no nosso caso é sempre vazio
array_shift($gets);
if(file_exists("includes/adm." . $get[0] . ".php")){
require ("includes/adm." . $get[0] . ".php");
}else{
echo "você ESTÁ NA HOME";
}
?>
E o que aconteceu?ao acessar o http://www.seusite.com.br/artigos se existir a pasta ele entra na pasta caso não exista a pasta ele vai executar o script index.php e vai verificar se esse arquivo artigos existe dentro da pasta includes/ no seu servidor se sim ele vai incluir ele ;)/>
Sako?
Bem está ai prontinho e funfando ^^ a e quanto ao método $_GET e $_POST continuam funcionando normal
Atenção:
Há uma desvantagem em usar URLs amigáveis você tem que em todos os links colocar o cominho completo para ele ex: você tem um menu e nele tem os seguinte links
/categorias
/php
se você tentar acessar assim ele não vai acessar pois imagina que você esteja no link http://www.site.com.br/minhavo/com/voce
quando você tentar acessar esses links acima ele vai fazer isso:
http://www.site.com.br/minhavo/com/voce/categorias
http://www.site.com.br/minhavo/com/voce/php
Então você viu que num rola ;)/> para funcionar você tem que colocar o link todo
http://www.site.com.br/categorias
http://www.site.com.br/php ;)/>
Bem é isso ai até mais galera
pra criar o aquivo .htaccess eu uso o bloco de notas? se sim da erro diz pra mim colocar um nome de arquivo...
Opa aqui eu consigo criar pelo bloco de notas..Tenta mudar a codificação
desculpa mas naum entendi.
Faz assim..clica em salvar como...depois no rodapé há 3 campos Nome do arquivo:Salvar como tipo:Codificação:No Salvar como tipo coloca "Todos os arquivos" e ai sim você coloca o nome .htaccess e manda salvar ..caso nao deixe salvar muda a codificação para algum ai.. para ver se ele livera mais num sei não ^^ :P/> pois o caso acima é o certo
hihi....antes de você me responder eu consegui, realmente era assim!!! Valeu lion - Visao alem do alcance, heim..hehehe
Tipo sobre a questão do
se você tentar acessar assim ele não vai acessar pois imagina que você esteja no link http://www.site.com.br/minhavo/com/vocequando você tentar acessar esses links acima ele vai fazer isso:http://www.site.com.br/minhavo/com/voce/categoriashttp://www.site.com.br/minhavo/com/voce/phpEntão você viu que num rola wink.gif para funcionar você tem que colocar o link todohttp://www.site.com.br/categoriashttp://www.site.com.br/php wink.gif
basta fazer o seguinte, no final do RewriteRule coloca um [QSA,L] no final... exemplo:
RewriteRule ^([^/]*)\/?$ /index.php?opc=$1 [QSA,L]
Mais ai você teria que criar um para cada sessão isso ai.. e eu queria eliminar isso saka? fazer um sem ter que ficar colocando mais isso ai
Parabéns, Érick !Ótimo tutorial !
Valeu =)
ow kra, aki funcionou, soh q tipowse eu uso soh www.site.com.br/dicas ele vai normal, mais se eu coloko assim: www.site.com.br/dicas/ ele perde o CSS, os Javascripts, e as imagenssabe pq??
Foi o que eu disse .. você tem que colocar o link completo =). ...
agora foiiivlw kra
lion, outra pergunta... essa parte RewriteRule .(/)?$ /html/seuuser/www/index.php você disse que é o caminho que esta o arquivo index, certo? eu coloco o endereço e naum funcionano meu caso ta assim :C:\Apache\htdocs\teste2\index.php ◄ ta errado?
tenta uma dessas:
RewriteRule .(/)?$ /htdocs/teste2/index.phpRewriteRule .(/)?$ C:\Apache\htdocs\teste2\index.phpRewriteRule .(/)?$ C:\\Apache\\htdocs\\teste2\\index.phpRewriteRule .(/)?$ C:/Apache/htdocs/teste2/index.php
rapaz ta dificil, agora apareceu outro erro:Internal Server ErrorThe server encountered an internal error or misconfiguration and was unable to complete your request.Erro 500-----------------------------------------------------JÁ RESOLVIR--VALEU!!!!
Quem disse que naum se pode implementar URLs amigavei em ASP???
Perfect Lion, só uma duvida!
se eu quizer passar o valor de alguma variável pela url eu preciso modifcar alguma coisa nesse arquivo .htaccess que você postou ai?
edit
-----
agora eu intendi!!!!
galera no meu servidor local os arquivos .htaccess não funcionam, será porque?eu tenho que configurar alguma coisa no apache?
tem que setar o .htacess para o caminho correto, e tem que criar um arquivo <SEM_NOME>.htaccess e salva-lo no document root
#LoadModule rewrite_module modules/mod_rewrite.so#AddModule mod_rewrite.c(httpd.conf) tire o ' # ' destas linhas salve e reinicie o apache.
Isso ai filhote.... eu havia dito isso ttm =)
Eu me enrolei um pouco ali no começo,
mas dei umas 3 lidas novamente e consegui fazer... :mellow:/>
Parabéns pelo tutorial! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif/>
consegui fazer parcialmente :P/> alterei algumas coisas no código que sem as alterações não funcionam...
.htaccess
# << URLs Amigaveis<IfModule mod_rewrite.c>RewriteEngine OnRewriteBase /RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule .(/)?$ /index.php</IfModule># >> URLs Amigaveis
index.php
<?php$gets = explode("/",str_replace(strrchr($_SERVER["REQUEST_URI"], "?"), "", $_SERVER["REQUEST_URI"]));array_shift($gets);if(file_exists("includes/" . $gets[0] . ".php")){require ("includes/" . $gets[0] . ".php");}else{echo "Teste";}?>
ai criei uma página pra listar alguns dados de um db.. tudo ok
<? include"config.php";$sql = mysql_query("SELECT * from jogos");$total = mysql_num_rows($sql);if ($total>0) {while ($file = mysql_fetch_array($sql)) {extract($file);echo " <a href='[http://www.site.org/artigo/nome/$nome/jogo_id/$jogo_id'>$nome
";}}](http://www.site.org/artigo/nome/%24nome/jogo_id/%24jogo_id) else {echo "Não existem jogos cadastrados";}?>
porém sempre aparece que não existe nada cadastrado no db
<?phpinclude"config.php";$jogo_id=$_GET['jogo_id'];$sql = mysql_query("SELECT * FROM jogos WHERE jogo_id='$jogo_id'");$total = mysql_num_rows($sql);if ($total>0) { $dados = mysql_fetch_array($sql); extract($dados);echo "$nome - $id - $swf<br>"; } else { echo "Nenhum produto foi encontrado"; } ?>
o que estou fazendo de errado?
O que você fez de errado foi não entender direito como o negocio funciona... eu disse que funciona normal o GET e POST ceto? se você está usando GET então você tem que colocar http://www.site.org/artigo/nome/$nome...d=$jogo_id
para que esse esquema ai funfe da maneira que você quer você não tem que usar o $_GET e sim a variavel $gets
ai no retorno faça isso:
<?phpinclude"config.php";$jogo_id=$gets[4]$sql = mysql_query("SELECT * FROM jogos WHERE jogo_id='$jogo_id'");$total = mysql_num_rows($sql);if ($total>0) {$dados = mysql_fetch_array($sql);extract($dados);echo "$nome - $id - $swf<br>";} else {echo "Nenhum produto foi encontrado";}?>
=)
Show de bola :joia:/>