quarta-feira, 14 de novembro de 2012

URL Amigável usando mod_rewrite e PHP (Friendly URL and PHP)

Tags: URL, amigável, .htaccess, Apache, mod_rewrite, RegEx

Semana passada busquei, estudei e encontrei um maneira legal para trabalhar com URL-amigável, retirar os benditos parametros estranhos (?s=1&m=2) da URL e colocar algo mais amigável para os indexadores de pesquisa e memorização do leitor. O artigo a seguir é para tranformar links assim http://www.site.com.br/processador.php?s=secao&m=materia em links assim http://www.site.com.br/secao/materia.html, "bunitinho" né ;).

Primeiro de tudo veja se estar ativo o Módulo mod_rewrite no Apache no httpd.conf, feito isto na raiz do site crie um arquivo .htaccess com um editor de texto tipo notepad e adicione a informação abaixo:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([a-zA-Z]*)\/([a-zA-Z]*)\.html$ /unideia/processador.php?s=$1&m=$2 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ /unideia/processador.php?s=ERRO&u=$1 [L,QSA]
</IfModule>

Agora comentarei linha a linha as informações do .htaccess

-- EXECUTA O QUE ESTIVER DENTRO DO IF SE O MÓDULO FOR ENCONTRADO
<IfModule mod_rewrite.c>
-- ATIVA A REESCRITA PARA ESTA PASTA
RewriteEngine On
-- DESATIVA A REESCRITA PARA ARQUIVOS
RewriteCond %{REQUEST_FILENAME} !-f
-- DESATIVA A REESCRITA PARA PASTAS
RewriteCond %{REQUEST_FILENAME} !-d
-- DESATIVA A REESCRITAS PARA LINKS
RewriteCond %{REQUEST_FILENAME} !-l
-- CRIA A REGRA VIA REGEX PARA A ESCRITA, OU SEJA NA URL http://www.site.com.br/secao/materia.html ELE CHAMARA O ARQUIVO PROCESSADOR.PHP PASSANDO COMO PARAMETROS **GET** S=SECAO E M=MATERIA
RewriteRule ^([a-zA-Z]*)\/([a-zA-Z]*)\.html$ /processador.php?s=$1&m=$2 [L,QSA]

-- AGORA A GRANDE SACADA (POR GENTILEZA, SE ALGUEM TEVE UMA IDÉIA MELHOR SOU TODO OUVIDOS), CASO ALGUEM TENTE FORÇAR ALGO, OU DIGITE UMA URL ERRADA ELE TRATA ISSO TAMBEM

-- DESATIVA A REESCRITA PARA ARQUIVOS
RewriteCond %{REQUEST_FILENAME} !-f
-- DESATIVA A REESCRITA PARA PASTAS
RewriteCond %{REQUEST_FILENAME} !-d
-- DESATIVA A REESCRITAS PARA LINKS
RewriteCond %{REQUEST_FILENAME} !-l
-- CRIA A REGRA VIA REGEX PARA A ESCRITA, OU SEJA NA URL http://www.site.com.br/?i=1&s=1 ELE CHAMARA O ARQUIVO PROCESSADOR.PHP PASSANDO COMO PARAMETROS **GET** E=ERRO E U=?i=1&s=1
RewriteRule ^(.*)$ /processador.php?e=ERRO&u=$1 [L,QSA]
</IfModule>

Pronto, agora é só criar um arquivo processador.php para tratar os parametros recebidos e chamar os arquivos corretos.

Espero ter ajudado, qualquer dúvida ou sugestão deixe seu comentário.

Nenhum comentário: