quarta-feira, 13 de outubro de 2010

URL amigavel com Perl

Introdução

URL amigavel é um otimo recurso, ajuda facilitar a visualização do usuario final, deixa a URL mais facil de entender, de decorar e muito mais bonita.

É comum você ver url assim:
http://www.seusite.com.br/index.pl?search=casa&data=29-09-2010&pagina=234

Que agora com esse artigo vai ficar assim:
http://www.seusite.com.br/casa/29-09-2010/234



Configurando o arquivo .htaccess

O primeiro vamos criar um arquivo .htaccess no diretório raiz do seu site.

Coloque esse comando no arquivo .htaccess:
<ifModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.pl?dados=$1 [L,QSA]
</ifmodule>

A linha "RewriteEngine On" habilita o modulo mod_rewrite do Apache.

A linha "RewriteCond %{REQUEST_FILENAME} !-f" verifica se a url digitada é um arquivo existente no site.

A linha "RewriteCond %{REQUEST_FILENAME} !-d" verifica se a url digitada é uma pasta existente no site.

A linha "RewriteRule ^(.*)$ index.pl?dados=$1 [L,QSA]" define a url com a GET dados.



Criando o arquivo index.pl

Agora é a parte mais importante da URL amigavel.

Crie o arquivo index.pl no diretorio raiz do seu site.

Coloque esse codigo no arquivo index.pl:

#!/usr/bin/perl

use strict;
use warnings;
use CGI qw(:standard);

my $dados = url_param('dados');
my @url = split(/\//, $dados);

if($url[0] ne ''){
if( -e $url[0] . '.pl'){
require $url[0] . '.pl';
}else{
require '404.pl';
}
}else{
require 'home.pl';
}


A linha "my $dados = url_param('dados');" capitura a GET dados e passa para variavel $dados;

A linha "my @url = split(/\//, $dados);" tem a função split do Perl, que usa expressões regulares para separar palavras ou frases e depois adiciona no array @url

As outras linhas usa condições de comparação para testar a GET, verificar a existencia do arquivo, se o arquivo não existir chama o arquivo de erro que é "404.pl".

Você deve ter percebido que eu não coloquei o comando
"print "Content-type: text/html\n\n";" para o funcionamento do HTTP, mas ele deve ser incluido em todos os outros arquivos.

Agora explicando como vai funcionar o script.

exemplos:

Se você criar o arquivo
"contato.pl".
Você ira acessar ele assim: http://www.seusite.com.br/contato

Se você criar o arquivo "empresa.pl".
Você ira acessar ele assim: http://www.seusite.com.br/empresa


Crie o arquivo "home.pl", ele vai ser o index do seu site. Porque quando alguem acessar seu site é esse arquivo que vai ser chamado. Você podera acessar ele de duas forma:
http://www.seusite.com.br
e
http://www.seusite.com.br/home


Explicação final

Nas outras paginas você não precisa chamar o Perl com o comando "#!/usr/bin/perl" porque ja esta sendo chamado no arquivo "index.pl"

Nas outras paginas voce vai incluir os modulos que deseja usar em tal pagina, o camando "print "Content-type: text/html\n\n";" para o funcionamento do HTTP.

Agora a explicação para pegar as outras GETs

Exemplo:

http://www.seusite.com.br/home/Lucas/Tiago/Moraes

esse codigos abaixo você deve usar em todas as paginas que for pegar as outras GETs:

use strict;
use warnings;
use CGI qw(:standard);

print "Content-type: text/html\n\n";

my $dados = url_param('dados');
my @url = split(/\//, $dados);


// para imprimir "Lucas"
print $url['1'];

// para imprimir "Tiago"
print $url['2'];

// para imprimir "Moraes"
print $url['3'];


Obs: quando usar GETs na pagina principal, nunca deixe de colocar o /home/, porque senão vai gerar erro:

exemplo:

http://www.seusite.com.br/Lucas/Tiago/Moraes

O arquivo "index.pl" vai achar que Lucas é um arquivo.

Pronto é isso!
Espero ter ajudado a todos!
Qualquer duvida o erro, é so comentar.
Desculpa algum erro de português.

Deus é o limite!



Links:
http://sao-paulo.pm.org/
http://rio.pm.org/
http://brasil.pm.org/
http://www.perl.org/
http://www.cpan.org/