Blog — 15 novembro 2009
Url Amigável com .htaccess

Olá pessoal irei mostrar como utlizar o .htaccess para criar url’s amigáveis para seu site.

O que é url Amigável ?
As url’s amigáveis são aqueles que podem ser lidas fácilmente por um pessoa e principalmente pelos mecanismo de busca, um exemplo a url desse post é ” http://www.ricardo.com/url-amigavel-com-htaccess” isso é uma url amigável, ao invés desse tipo de url “http://www.ricardok.com/?post=387″, isso é legível apenas para o sistema aonde essa url aponta, pois para as pessoas e os mecanismo de busca não.

Como fazer as url’s amigáveis?

Passo 1 – Você precisa habilitar no seu apache o mod_rewrite.
Procure o arquivo httpd.conf (geralmente ele se encontra dentro da pasta conf ou config).
Abra o arquivo como edição e procure pela linha

#LoadModule rewrite_module modules/mod_rewrite.so

Descomente removendo o # do começo da linha, ficando assim

LoadModule rewrite_module modules/mod_rewrite.so

Agora procure a linha

AllowOverride None

E altera para ficar assim

AllowOverride All

Com isso Habilitamos o servidor apache a interpretar o mod_rewrite.
para maiores informações mod_rewrite apache

Passo 2 Criar o arquivo .htaccess
Crie um arquivo novo em qualquer editor e salve dessa forma “.htaccess” (sem as aspas) abra o arquivo e edite ele com o código abaixo:

Options +FollowSymlinks
#Habilita oo mod_rewrite no arquivo
RewriteEngine On
#diz que o diretorio base é /
RewriteBase /
#verifica se existe um arquivo com o nome do parametro vindo após a /
RewriteCond %{REQUEST_FILENAME} !-f
#verifica se existe uma pasta com o nome do parametro vindo após a /
RewriteCond %{REQUEST_FILENAME} !-d
#Direciona a url para a página index.php
RewriteRule .(/)?$ index.php

Estamos quase lá. Agora falta apenas tratar os parametros no php

Passo3 – Tratando os parametros no PHP
no arquivo index.php você trata os parametros vindos da url assim:

#Essa parte pegamos a varaivel do servidor "REQUEST_URI" e tratamos ela para pegar os parametros vindo após a "/"
$params = explode("/",str_replace(strrchr($_SERVER["REQUEST_URI"], "?"), "", $_SERVER["REQUEST_URI"]));

#A variavel params armazena agora um array de conteudo com todos os parametros que foi digitado na url

#Nessa parte nos eliminamos o primeiro elemento da variavel $params pois é um elemento vazio.
array_shift($params);

Assim temos um array com os parametros vindos da url e podemos trabalhar da forma que for melhor para cada um. Exemplo:
Acessando a url “http://www.teste.com/pagina/institucional”
a variavel $params ficaria assim

Array(
[0] -> "pagina",
[1] -> "institucional"
)

Sendo assim poderia pegar a primeira variavel para ser o arquivo a ser acessado e a segunda variavel a ação que o arquivo executaria.
Utilizando esse método você consegue pegar N variáveis vinda da url, a cada “/” é uma variável, apenas teria que ser tratada na página o cada variável é.

Para utilizar essa mesma regra em servidores IIS você tem que utilizar em vez do arquivo .htaccess o arquivo web.config e dentro dele utilizar a seguinte regra.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Imported Rule 1">
                    <match url=".(/)?$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" pattern="" ignoreCase="false" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" pattern="" ignoreCase="false" />
                    </conditions>
                    <action type="Rewrite" url="index.php" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

Isso ae pessoal, espero ter ajudado :)

Voce também pode gostar disso

Related Articles

Share

About Author

(5) Readers Comments

  1. Olá Ricardo parabens pela sua publicação. Boa sua iniciativa de escrever algo muito util.
    Parabens

  2. Muito bom!

    Esse script resolveu um grande problema que estava tendo!

    Obrigado e parabéns!

  3. Fico na dúvida: como usar

    if($_GET['param']==”parametro1″)
    {
    echo “Acessou o parametro 1″;
    }
    else
    if($_GET['param']==”parametro2″)
    {
    echo “Acessou o parametro 1″;
    }

    e também no $_POST
    ???

  4. Olá @triploX,

    você vai acessar os parametros get através da váriavel $params, a url seguinte http://www.dominio.com/parametro1/parametro2, você teria acesso aos parametros da seguinte maneira,
    echo $params[0]; // esse é o parametro1 da url
    echo $params[1]; // esse é o parametro2 da url

    via post você recebe normal sem problemas com os name do formulário $_POST["name_do_formulario"].

    qualquer dúvida que tenha ficado entre em contato :)

  5. Este é o método mais simples, mas…

    …O ruim de se utilizar o explode é que sua página recebe 2 parâmetros assim (http://127.0.0.8/products/1) e você acessa esta mesma url assim (http://127.0.0.8/products) gera um erro na página, que pode ser usado por alguém mal intencionado… =/

Deixe um Comentário

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>