15 novembro 2009 5 Comments

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

5 Responses to “Url Amigável com .htaccess”

  1. Gelton Cruz 18 janeiro 2010 at 4:43 pm #

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

  2. Octavio Dias 26 janeiro 2010 at 12:58 pm #

    Muito bom!

    Esse script resolveu um grande problema que estava tendo!

    Obrigado e parabéns!

  3. Triplo X 7 março 2010 at 6:15 pm #

    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. Ricardo Gonçalves 9 março 2010 at 10:41 am #

    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. Tylër 26 maio 2010 at 11:06 pm #

    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… =/


Leave a Reply