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




Olá Ricardo parabens pela sua publicação. Boa sua iniciativa de escrever algo muito util.
Parabens
Muito bom!
Esse script resolveu um grande problema que estava tendo!
Obrigado e parabéns!
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
???
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
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… =/