URL Amigável – PHP e arquivo .htaccess

5 Comments

Simples mas bem eficiente, exemplo pratico de como usar url amigável em seu site!!…..

Crie um arquivo “.hatccess” no diretório raiz de seu site!.


<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php
</IfModule>

Toda e qualquer URL digitada, será direcionada para o seu arquivo “index.php”. Então agora, é só você tratar os parâmetros.

Se você usa uma URL do tipo:

www.site.com.br/index.php?pag=catalogo&id=1

Você pode deixar ela amigável:

www.site.com.br/catalogo/1

Para você pegar esses parâmentros da url amigável, pode se usar expressões regulares. No inicio de seu arquivo “index.php” coloque o código:


$aux = substr( $_SERVER['REQUEST_URI'], strlen('/'));
if( substr( $aux, -1) == '/'){
 $aux=substr( $aux, 0, -1);
}
$urlARRAY___ =explode( '/', $aux);

O que acontece aqui ?, Você está pegando sua url e separando dentro de um array, pela string de separaçao “/” (barra).

Se tiver (catalogo/1) então ele separa, “catalogo” e “1“, porque a / (barra) está definida como separador.

A sua url é: www.site.com.br/catalogo/1 . Então por causa do htaccess, ele será direcionado para o arquivo “index.php” e depois a url será recortada levando em consideração a / (barra) como separador:

$urlARRAY___[1] vai receber o valor “catalogo”

$urlARRAY___[2] vai receber o valor “1″

Pronto feito isso! é só vc trabalhar com os seus parâmentro…

Uma observação importante:

Usando esse exemplo de URL, você deve chamar arquivos de imagens, css, video, flash etc..com o caminho completo:

Se antes você usava:


<link rel="stylesheet" type="text/css" media="all" href="css/stylo.css" />

Agora você deve usar:


<link rel="stylesheet" type="text/css" media="all" href="http://www.site.com.br/css/stylo.css" />

Por causa do arquivo .htaccess em ação, você precisa arrumar esses caminhos para sua aplicação achar os arquivos corretamente.

5 Comments (+add yours?)

  1. Diego Fernandes
    dez 03, 2010 @ 16:43:11

    Parabéns, Vitor!

    O código que vc colocou funciona muito bem e está muito bem explicado.

    Ótimo!

  2. João Paulo
    jan 12, 2012 @ 16:39:44

    Olá, Vitor!

    Uma coisa que eu não consigo entender:

    imagine assim a página do site:

    Link 1- http://www.site.com/pagina.php?cod_usuario=1

    Eu quero que ela fique:

    Link 2- http://www.site.com/pagina/joao

    até aqui, tudo bem, mas imagine que eu tenho uma página que exiba todos os usuários, em forma de tabela com a sua foto e seu nome abaixo dela, o que eu quero fazer e não acho em lugar nenhum é fazer com que o link que já apareça quando eu pare o mouse sobre a foto do usuário já entre em ação o Link 2 e não apenas quando o usuario digitar isso na barra de endereços

    como eu faço para o .htaccess já reconhecer esses valores que são gerados automaticamente?

  3. admin
    jan 22, 2012 @ 14:38:45

    Olá joão!…
    Nesse caso, vc precisa arrumar todas as suas url’s, exemplo, no lugar de “pagina.php”, vc tem que colocar “pagina”……….. vc precisa desenvolver o seu site setando as url’s já com o formato amigável, entendeu ?

    Para nomes dinamicos como o “joão”, vc precisa pegar a string que vem do banco e limpar ela antes de usar, deixando tudo em letra minuscula, e tirando os seus acentos. (vc pode usar expressões regulares para isso)……
    Mas eu não aconselho usar nomes no lugar de ID’s para buscar no banco, porque se vc editar o nome, pode acontecer da url não funcionar mais, e se o google já indexou por exemplo, a url antigo vai parar de funcionar, exemplo:

    http://www.site.com/pagina/joao
    Se editar o nome:
    http://www.site.com/pagina/joao-paulo

    Um jeito de evitar isso, é usar o nome mais o ID, ai vc busca no banco pelo ID, exemplo:
    http://www.site.com/pagina/joao/2
    http://www.site.com/pagina/vitor/30
    (Usando o ID, vc não precisa se preocupar com a mudança do nome)

    Espero ter ajudado!… Att..

  4. Nil Késede
    abr 21, 2012 @ 18:24:15

    Uma dica pra você não ter que mudar as urls de imagens, css, video, flash etc..
    Use a tag BASE:

Leave a Reply