Login:

iMasters | Por uma internet mais criativa e dinâmica

Feeds

Web Standards

Feed da seção Web Standards

Newsletter de Web Standards


Segunda-feira, 05/02/2007 - 10:40 - Por Darley Passarin
Seções relacionadas:

URL Rewriting: Criando URLs competitivas!

Neste artigo vamos entender mais sobre a tecnologia conhecida como URL Rewriting ou Rewrite engine, que, segunda a literatura, é uma técnica que permite a re-escrita de URLs, ou seja, possibilita que uma determinada URL original seja mascarada ou substituída por outra mais segura, apresentável e acessível para nós humanos e para os motores de buscas (Google, Yahoo, Msn e etc).

Nas próximas linhas será apresentado o que é realmente esta técnica, quais seus benefícios, como utilizar e configurar, uma demonstração de um exemplo prático e por fim algumas conclusões e referências.

O que é? E quais os benefícios?

Como dito anteriormente, os termos URL Rewriting ou Rewrite engine representam uma forma de mascarar uma determinada URL, tornado-a acessível de diferentes formas. Mas não é somente isso, se esta técnica for aplicada de uma forma correta, trará ótimos benefícios, que serão descritos nas próximas seções.

Na prática a responsabilidade deste mascaramento é do servidor web. O pioneiro desta técnica é o servidor web Apache, que implementa nativamente o módulo Mod_Rewrite, responsável por este processo.

Antes de falar sobre Mod_Rewrite, para aqueles que estão perdidos, será mostrado logo abaixo um exemplo real deste técnica.

http://www.meusite.com/not.php?cat=9

Na linha acima foi mostrado uma URL que é normalmente encontrada na internet, que utiliza determinados parâmetros para filtrar, dentre uma base de dados, as informações que condizem com os parâmetros enviados. Para entender melhor, a página not.php irá mostrar uma lista de notícias ligadas ao parâmetro cat, que representa uma determinada categoria.

http://www.meusite.com/noticias/9/php-avancado.html

Através de outra URL bem diferente, é possível executar o mesmo processo que irá resultar nas mesmas informações. Mas nota-se um diferencial, que se utilizado de forma certa, pode-se adicionar nível de competitividade a URL. Isso mesmo, competitividade, se você se preocupa em tornar seu site mais conhecido, é importante aliar-se aos motores de buscas, por que eles trabalham dia e noite, e sem medir esforços, levam o seu site ao conhecimento de milhares de usuários. Mas para aparecer nas primeiras linhas, é necessário ficar atento a algumas questões, dentre elas você pode começar através da URL Rewriting.

São três pontos importantes que podem ser levados em conta ao se tratar dos benefícios do URL Rewriting:

  • Facilita a indexação de informações por motores de buscas;
  • Torna a URL mais agradável e de fácil compreensão por nós humanos;
  • E Segurança, evitando problemas como SQL Injection.

Lembrando que os motores de buscas consideram com certo nível de importância em palavras chaves localizadas em URLs, desta forma, por que não utilizar desta vantagem. Voltando a segunda URL de exemplo, pode-se ver que foram adicionadas as palavras noticias e php-avancado. Nitidamente percebe-se que a segunda URL terá mais chances (considerando apenas a URL e não o conteúdo da página) de aparecer nos resultados do que a primeira URL, caso seja executado uma consulta que possua tais palavras. Devido a isso que existe a importância em se estruturar uma URL, se importando com pequenos detalhes, que em um todo, trará ótimos resultados.

Outro ponto que pode ser explorado está relacionado em tornar a URL mais agradável ou amigável (como outros articulistas descrevem) para nós humanos, permitindo assim uma maior compreensão. Algumas pessoas tentam se localizar dentro do site através da URL, desta forma fica bem mais fácil saber onde ela está localizada, se adotada a segunda URL de exemplo, em que está nítido na URL que a página trata de notícias sobre php avançado. Também deve ser considerada a memória, por que fica mais fácil decorar palavras do que códigos, principalmente quando o usuário não sabe para que servem.

Em relação à segurança a URL Rewriting pode evitar alguns problemas que ocorrem, como por exemplo, o SQL Injection. O módulo Mod_Rewrite do Apache utiliza Expressões Regulares para identificar qual URL está sendo executada e filtrar os dados necessários para a chamada da URL original. Desta forma, através destas expressões é possível invalidar informações indevidas passadas pela URL, que podem abrir brechas para a execução de códigos indevidos. Este assunto será citado novamente na seção que mostrará exemplos práticos sobre URL Rewriting.

Primeiros passos na prática

Vimos até o momento uma introdução sobre URL Rewriting, juntamente com suas vantagens e motivações, que viabilizam a sua utilização. Mas agora iremos partir para a prática, será mostrado como habilitar o módulo Mod_Rewrite do Apache e como iniciar a sua utilização.

Para iniciar o funcionamento do Mod_Rewrite será necessário executar dois passos, primeiro alterar o arquivo de configuração do Apache (httpd.conf) e o segundo criar o arquivo .htaccess que conterá as instruções para a re-escrita.

Alterando o arquivo de configuração

No arquivo httpd.conf, localize as seguintes linhas:

LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c

Retire o comentário () das duas linhas, que resultará em:

LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c
Localize novamente as seguintes linhas:

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

Substitua a palavra Nome por All, que resultará em:

<Directory />
    Options FollowSymLinks
    AllowOverride All
</Directory>

Feitas as alterações, reinicie o Apache.

Criando e manipulando o .htaccess

Crie um arquivo chamado .htaccess e salve-o. Após concluir a edição, copie-o para o diretório raiz do servidor

(ex: /public_html).

Inicie o arquivo com a seguinte instrução:

RewriteEngine On

Este comando habilita o módulo Mod_Rewrite. Lembrando que este arquivo não é utilizado apenas para esta finalidade, por isso a necessidade de iniciar o processo de re-escrita.

As instruções seguintes serão programadas para solucionar um problema simples como exemplo inicial, em que para todas as URLs executadas com extensão .html serão re-escritas para suas respectivas páginas em php.

RewriteRule (.)\.html 1.php

A instrução é composta basicamente por três expressões separadas por espaço:

01.

RewriteRule

É a expressão que inicia uma linha de instrução.

02.

^(.)+\.html$

É a expressão regular que identifica a página que deverá ser filtrada. Neste momento é muito importante ter conhecimentos sobre expressões regulares, desta forma, é preciso que você consulte outras fontes sobre assunto.

03.

$1.php

Está é a URL original que será executada. Veja que existe a seguinte expressão 1, esta representa o primeiro parâmetro filtrado pela expressão regular. Os parâmetros são definidos pelos conteúdos que atendem a expressão entre (), caso exista mais de um par de (), os próximos parâmetros serão representados como 2, 3, 4...

Desta forma, se for executada uma URL chamada teste.html será re-escrita e executada como teste.php.

Exemplo Prático

Bem, para reforçarmos o assunto e ver na prática o seu funcionamento, será mostrado um exemplo simples de um sistema de notícias. Será abordado apenas as partes que irão auxiliar na exemplificação do problema.

Para tanto iremos criar quatro arquivos: UrlManage.class.php; Noticias.php; Noticia.php; e .htaccess. Faça o download dos arquivos.

Primeiro iniciaremos pela classe UrlManage, que será utilizada para manipular todas as URLs.

<?
class UrlManage {
	public static function getUrlNoticia($IdNoticia, $Categoria, $Titulo){
		if( UrlManage::HabilitadoModRewrite() ){
			return "noticia/$IdNoticia/".UrlManage::convertStringByUrlString($Categoria)."/".
					UrlManage::convertStringByUrlString($Titulo).".html";
		}else{
			return "noticia.php?id=$IdNoticia";
		}
	}
	private static function convertStringByUrlString($String){...}		
	private static function HabilitadoModRewrite(){
		return true;
	}
}
?>

Na imagem (UrlManage.class.php) acima método principal é o getUrlNoticia(...), que retorna o link já formatado. Antes de retornar a string da URL é verificado, através do método HabilitadoModRewrite(), se a opção de re-escrita está habilitada ou não.

Este método tem a função de tornar fácil e sem maiores transtornos a possibilidade de adotar ou não a re-escrita de URL's, alterando simplesmente o valor booleano que é retornado.

O método convertStringByUrlString(...) é utilizado para limpar (remover espaços, caracteres especiais e etc) uma determinada string e torná-la apita para ser utilizada como URL.

A utilização da classe UrlManage é simples. Veja na figura (Noticias.php) abaixo.

<?
	include("UrlManage.class.php");
	
	//Essas informações normalmente virão de uma base de dados
	$Noticias[0]["IdNoticia"] = 1;
	$Noticias[0]["Categoria"] = "Categoria 01";
	$Noticias[0]["Titulo"] = "Título da Notícia 01";
	$Noticias[1]["IdNoticia"] = 2;
	$Noticias[1]["Categoria"] = "Categoria 02";
	$Noticias[1]["Titulo"] = "Título da Notícia 02";
	
	//Criando uma lista com os links das notícias
	print("<ul>");
	foreach ($Noticias as $Noticia){
		$link = UrlManage::getUrlNoticia($Noticia["IdNoticia"], $Noticia["Categoria"], $Noticia["Titulo"]);
		print("<li><a href="".$link."">".$Noticia["Titulo"]."</a></li>");
	}
	print("</ul>");
?>

Neste codigo é possível visualizar uma aplicação simples da classe UrlManage, que através de uma base de informações é criado uma lista de dados, contendo o título e o link para a respectiva notícia.

O resultado da execução do arquivo Noticias.php resultará nas seguintes informações, demonstradas na figura abaixo.

<!-- Resultado após compilação -->
<ul>
	<li><a href='noticia/1/categoria-01/titulo-da-noticia-01.html'>Título da Notícia 01</a></li>
	<li><a href='noticia/2/categoria-02/titulo-da-noticia-02.html'>Título da Notícia 02</a></li>
</ul>

Veja que os resultados dos links estão estruturados para a utilização da re-escrita. O interessante é que em nenhum momento fica explicito qual a linguagem utilizada pelo site, nem como está definida a estrutura de diretório (original) e organização de arquivos do site, que por segurança torna-se uma vantagem. Agora basta codificarmos o .htaccess para interpretar a estrutura de URL definida.

Neste momento o importante é saber quais informações serão necessárias para a visualização da notícia. Pela estrutura que foi utilizada, para cada notícia existe um identificador, chamado de IdNoticia, que normalmente é representado por uma chave primaria e auto-incremental em um banco de dados. Então basta apenas saber o valor deste identificador, para que seja feito a recuperação das informações na página de exibição da notícia, que será a Noticia.php.

Então estruturaremos o .htaccess da seguinte forma:

RewriteEngine on
RewriteRule           ^noticia\/([0-9]+)(\/[a-z0-9_-]+)?(\/[a-z0-9_-]+\.html)?$ Noticia.php?id=$1&categoria=$2&titulo=$3
Noticia.php?id=$1&categoria=$2&titulo=$3

Verifique que a expressão regular utilizada na instrução atende a estrutura da URL. E que através do primeiro parâmetro, identificado como um numero de 0 a 9 maior ou igual a um dígito, representa o identificador necessário para a visualização da notícia e que será passado via GET através da variável "0id". E os outros parâmetros que identificam a categoria e o título da notícia podem vir ou não a ser usados.

Rapidamente, voltando ao assunto sobre Segurança citado anteriormente, é neste momento que é possível estruturar uma expressão regular que não deixe brechas para a inclusão de informações indevidas na URL. No caso do identificador da notícia (id), a expressão não possibilita a que um usuário tente inserir outras informações que não seja apenas números, se tentar fazer isto, a página não será encontrada, e irá dar o erro 404 de página não encontrada. Desta forma, conseqüentemente você já estará validando as informações vindas via URL, mantendo a integridade dos dados.

E por fim, veja na figura abaixo o código da página Noticia.php e na linha 9 o resultado da execução proveniente do clique no primeiro link da lista (resultado Noticias.php).

<?
	$IdNoticia = $_GET["id"];
	$Categoria = $_GET["categoria"];
	$Titulo = $_GET["titulo"];
	
	print "$IdNoticia # $Categoria # $Titulo";
	
	//Resultado:
	//1 # /categoria-01 # /titulo-da-noticia-01.html 
?>

Fique livre em estruturar a URL conforme suas necessidades, mas sempre lembre em tornar, com pequenos detalhes, suas URL's mais competitivas, seguras e agradáveis.

Conclusão

Neste artigo foram mostradas as vantagens de se utilizar URL Rewriting, juntamente com exemplos práticos da utilização do módulo Mod_Rewrite do servidor web Apache. Lembrando que é de extrema importância o estudo sobre Expressões Regulares, para a utilização correta deste recurso. Além do Apache é possível executar esta técnica em outros servidores web, como, por exemplo, no IIS (Internet Information Services) e também com outras linguagens como ASP .NET e Java. Mas isso é assunto para o próximo artigo, obrigado.

Referências

Apache

http://en.wikipedia.org/wiki/Rewrite_engine
http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html
http://www.allsyntax.com/tutorials/Apache/21/Mod_Rewrite-URLs-for-Search-Engines/1.php

IIS

http://www.qwerksoft.com/products/iisrewrite/
http://www.isapirewrite.com/
http://www.motobit.com/help/url-replacer-rewriter/iis-mod-rewrite.asp
http://cheeso.members.winisp.net/IIRF.aspx

ASP.NET

http://www.urlrewriting.net/en/Default.aspx
http://weblogs.asp.net/fmarguerie/archive/2004/11/18/265719.aspx

Java

http://www.zlatkovic.com/httpredirectfilter.en.html
http://tuckey.org/urlrewrite/
http://software.softeu.cz/rewriter/

Todos os artigos de Darley Passarin

24 comentários publicados

  • 1. Excelente

    Segunda-feira, 05/02/2007, por Leandro Vieira

    Olá Darley, parabéns pelo artigo e pela sua didática aqui aplicada. Um abraço e motiva-se a nova publicações.

    Responder comentário
  • 2. Pequena Dúvida

    Segunda-feira, 05/02/2007, por Michael Carajeleascov

    Darley, parabéns pela matéria, sempre me incomodaram as url's com as informações de consulta. Frequentemente vejo alguns sites com esse tipo de URL e nem imaginava como eram feitas, agora ja sei. Fiquei apenas com uma dúvida, para tralhar com ASP é só seguir o mesmo esquema, alterando as TAG's?

    Responder comentário
  • 3. Bem explicado!

    Segunda-feira, 05/02/2007, por Bruno Gasparetto

    A explicação foi muito boa e ainda forneceu um belo material de consulta.
    No entanto, segundo a Apache, é melhor utilizar as regras de rewriting no próprio arquivo de configuração, estipulando o diretório que receberá a regra.
    Isto porque ao configurar o servidor para utilizar arquivos .httaccess a performance diminui, devido ao fato dele ter de procurar em todas as pastas e subpastas este arquivo.
    Michael, o esquema é o mesmo, a diferença é que ao invés de chamar um arquivo .php vc utilizara o .asp.

    Responder comentário
  • 4. Tirando dúvidas

    Terça-feira, 06/02/2007, por Darley Passarin

    Bem, primeiro obrigado pelos parabéns e fico feliz de terem gostado. Michael, como mencionado no texto, esta tecnologia é configurada no servidor web, desta forma, para que você possa aplicá-la com o ASP, será necessário configurar o IIS (porque o apache não roda ASP nativamente %u2013 veja uma solução para isto http://www.apache-asp.com/), cujo assunto será abordado em meus próximos artigos.
    Quanto a configuração direto no http.conf para melhorar a performance, o Sr. Bruno está correto, na documentação do Apache é mencionado tal afirmação. Mas mesmo assim, para a maioria dos desenvolvedores que possuem seus sites armazenados em servidores de hospedagem, não possuindo acesso ao arquivo http.conf, está opção (.htaccess), descrita no artigo, é a melhor possível.
    Estarei disponível para responder qualquer dúvida, obrigado.

    Responder comentário
  • 5. tentei e nda!

    Terça-feira, 06/02/2007, por Ricardo Benfica

    tentei fazer o cod de varias maneiras para uma pagina assim www.meusite.com/artigos.php?id=1

    ser www.meusite.com/artigos/1

    alguem pode me dar uma ajuda? pedi ao host q liberasse o mod_rewrite..segundo eles foi liberado

    Responder comentário
  • 6. Link do exemplo Quebrado

    Terça-feira, 06/02/2007, por Heloisa Fernanda

    Olá, não consegui fazer download dos exemplos. O link esta quebrado e sendo redirecionado para a página principal.

    Responder comentário
  • 7. Muito 10

    Quarta-feira, 07/02/2007, por Deni Augusto

    Parabéns pela matéria - Uma das melhores que ja li aki no Imasters sobre php. Um grande abraço pra você.

    Responder comentário
  • 8. Link

    Quarta-feira, 07/02/2007, por Darley Passarin

    Pessoal, para aqueles que não conseguiram baixar os arquivos utilizados no artigo, utilize a url http://www.darley.com.br/imasters/urlrewriting_exemplos.zip para baixá-los. Obrigado.

    Responder comentário
  • 9. Resposta ao Ricardo Benfica

    Quarta-feira, 07/02/2007, por Darley Passarin

    Ricardo Benfica, mesmo já tendo respondido sua dúvida por email, estarei mostrando a solução para seu problema, para que outras pessoas possam tirar suas dúvidas. Para tanto, crie um arquivo chamado .htaccess o coloque as seguintes instruções: RewriteEngine on RewriteRule ^artigos\/([0-9] )?$ artigos.php?id=$1 . Devido que neste campo de comentário não é possível quebrar linha, lembre-se que a instrução RewriteRule deve ficar na linha abaixo da "RewriteEngine on". O segredo está na expressão regular, para isso é necessário ter conhecimento no assunto. Qualquer dúvida entre em contato.

    Responder comentário
  • 10. Asterisco

    Quarta-feira, 07/02/2007, por Danilo Faustinoni Cabello

    Não tive oportunidade ainda para testar, mas uma coisa que me intrigou é a falta de asterisco nas suas expressões como: RewriteRule (.)\.html $1.php precisa de um asterisco para ele redirecionar por exemplo teste.html para teste.php, certo?

    E no caso de [0-9] teria que haver [0-9]{1,}?

    Não quis parecer arrogante nem nada, gostaria apenas de saber se há alguma diferença especial nas regex do apache.

    Vlw, abraço!

    Responder comentário
  • 11. IMPORTANTE

    Quarta-feira, 07/02/2007, por Darley Passarin

    Olá Danilo Faustinoni Cabello, obrigado pelas observações, que estão corretas, por que na verdade alguns caracteres não apareceram após a publicação na internet. Desta forma, enquanto entro em contato para efetuarem estas correções, estou disponibilizando para download (http://www.darley.com.br/imasters/darley_passarin_url_rewriting.pdf) o arquivo original do artigo. Obrigado.

    Responder comentário
  • 12. Parabéns!!!

    Quinta-feira, 08/02/2007, por Leonardo Soares

    Parabéns pelo artigo! Está ótimo!

    Responder comentário
  • 13. Problema IE 7

    Quinta-feira, 08/02/2007, por vinicius gallafrio

    Ola Darley, estou usando o IE 7 e os layers dos trechos de codigo ficam sobre o texto, o que prejudica a leitura do seu artigo. Por favor repasse essa info pra os tecnicos do site e me desculpe por usar esse espaço para isso, mas é que não encontrei outro local.... abraco

    Responder comentário
  • 14. Browser

    Quinta-feira, 08/02/2007, por Darley Passarin

    Olá Vinicius Gallafrio, a sua observação já foi informada à equipe técnica. Enquanto isso utilize o Firefox, por que além de não possuir este problema, todos os códigos ficam identados corretamente. Obrigado.

    Responder comentário
  • 15. Dúvida httpd

    Terça-feira, 13/02/2007, por paulo pereira

    Darley gostaria que você me ajudasse com o httpd... no meu arquivo não existe a linha "AddModule mod_rewrite.c" e quando eu adiciono ela ao arquivo da um erro do apache quando reiniciado.

    Uso o apache 2.0.59

    obrigado

    Responder comentário
  • 16. Até que enfim achei

    Quarta-feira, 14/02/2007, por joshua vadekk

    Olá Darley, muito interessante sua materia, semçre quis saber como fazer esse tipo de configuração em PHP, esse padrão utilizado pelo imasters nas suas URLs é muito legal, agora já sei o caminho das pedras e só tenho a agradecer.

    Responder comentário
  • 17. Configurando Apache 2.2

    Terça-feira, 06/03/2007, por Darley Passarin

    Olá Pessoal, conforme algumas dúvidas expressas por alguns usuários, referente à configuração do Apache na versão 2.2, segue algumas instruções para esta configuração: Primeiro, remova o # da linha "LoadModule rewrite_module modules/mod_rewrite.so";
    Segundo, em todas as linhas que tiver a seguinte expressão "AllowOverride None", substitua por "AllowOverride All"; Terceiro, reinicie o Apache e aproveite. Abraços...

    Responder comentário
  • 18. Perfeito...

    Quinta-feira, 08/03/2007, por Écio Virgílio

    Ótima didática, excelente tema, Parabéns. Acho que o melhor artigo que jah li aqui no IMASTERS.

    Responder comentário
  • 19. Muito bom!

    Sexta-feira, 09/03/2007, por James Clebio Silva

    Belo artigo, Darley...

    Responder comentário
  • 20. Muito bom!

    Domingo, 25/03/2007, por Fernando Santana Medrado

    Parabéns pelo artigo, vc conseguiu simplificar um assunto bem complexo...

    E pra galera que tá começando nisso (como eu), aí vai um link de uma ferramenta q ajuda muito... flw.
    http://www.mod-rewrite-wizard.com/

    Responder comentário
  • 21. Explendida

    Quinta-feira, 29/03/2007, por tellys castro

    muita clara, exemplificada!!! nota 10
    parabens

    Responder comentário
  • 22. no apache 1,3,27 nao funcionou

    Terça-feira, 26/06/2007, por tellys castro

    no apache 1,3,27 nao funcionoiu, pq sera... no 2.2 fucniona...

    Responder comentário
  • 23. o meu funcionou sim!

    Domingo, 26/08/2007, por Bruno Trazzini

    Options FollowSymLinks
    RewriteEngine on
    RewriteRule ^([0-9] \.html)?$ post.php?id=$1

    Responder comentário
  • 24. Não funcionou, nem a pau!

    Terça-feira, 06/11/2007, por Marcos Ferreira

    Darley eu peguei estes exemplos e excutei no meu apache, quanto pesso para o arquivo noticia.php resgatar as variáveis ele nã resgata, porque? Eu joguei no servidor da locaweb também a mesma coisa, não funcionou. Me ajuda por favorrrrr

    Responder comentário

Poste um comentário


Os textos publicados neste espaço são de responsabilidade única de seus autores (colunistas e leitores) e podem não expressar necessariamente a opinião do iMasters.

Sobre o autor

Darley Passarin é bacharel em Sistemas de Informação pela Ulbra/TO. Trabalho como Engenheiro de Software na Diretoria de Tecnologia da Informação e Comunicação da Fundação Universidade do Tocantins (UNITINS), com projetos voltados a E-learnning. Possuo conhecimentos avançados em PHP, ASP .Net C#, Java, Web Standards, UML e Desenvolvimento baseado em Componentes.


Indique para um amigo

captcha

TI SHOP Produtos iMasters

  • Lançamento: CD-ROM Treinamento Aplicado de SQL - Lançamento! Treinamento Aplicado de SQL - Aprenda a trabalhar com SQL com bancos de dados Oracle e SQL Server. São mais de 100 tópicos explicados por Mauro Pichilliani, um articulistas mais lidos do iMasters. Aproveite! Apenas R$ 69,90 no TI SHOP.
  • Lançamento: Livro iMasters "O Encontro de 2 Mundos"- Este livro conta com 56 crônicas de profissionais mais admirados e influentes do mercado brasileiro de Internet. Aproveite o preço especial para leitores do iMasters. Apenas R$ 40,00 e envio imediato!
  • DVD Curso Completo de Photoshop - Do conceito à finalização Lançamento! Curso Completo de Photoshop, em DVD, com mais de 230 aulas dividas em 4 módulos: conceito, básico, avançado e finalização. Apenas R$ 69,50 no TI SHOP - Frete com 50% de desconto
  • DVD Javascript Starter - Curso Completo Com mais de 9 horas de vídeo-aulas, é um curso completo sobre Javascript. Ideal para quem deseja aprender a linguagem. Apenas R$ 64,90 no TI SHOP - Frete com 50% de desconto!

2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.