Ocultando a tecnologia de um site usando mod_rewrite

No artigo anterior, sugeri a mudança na configuração do httpd.conf para ocultar qual a tecnologia de um site. Isso pode ser útil em dois casos. O primeiro, por uma questão estética (não tão relevante) e a segunda por uma questão de segurança. Já que não se conhece como o site foi feito, ataques com SQL Injection, por exemplo, podem ser atrasados.

Mas voltando ao conteúdo desse artigo, o Apache oferece outra forma de maquiar uma URL. E isso é através do mod_rewrite. Além de oferecer a segurança em não mostrar a extensão de um arquivo, o mod_rewrite permite a criação de URLS ‘fáceis’ de entender e não monstros do tipo index.php?id=7&date=05/02/97&page=6

O mod_rewrite não passa de um módulo (que deve estar ativado no httpd.conf) que permite, através de expressões regulares, redirecionar o usuário. Mas, como ele funciona?

A configuração das URLs amigáveis envolve a criação de um arquivo .htaccess. Esse arquivo deve estar no diretório no qual deve ser trabalhado. Vamos a configuração:


RewriteEngine On
RewriteRule ^(noticias)/(.+)$ index.php?id=$1&go=$2

Vamos entender o que faz as linhas acima.
A primeira aciona o módulo. Já a segunda é marcada por três tabulações:

A primeira tabulação traz a palavra RewriteRule, que indica que essa linha possui uma regra de redirecionamento.

A segunda tabulação monta a URL virtual. Segundo essa regra, qualquer URL noticias/teste será redirecionado para a terceira tabulação, index.php?id=$1&go=$2. Observe que $1 e $2, usadas na terceira tabulação, são na verdade a primeira (noticias) e a segunda (qualquer palavra) partes da URL virtual.

Mais do mesmo:
Continue lendo sobre expressões regulares.
Gerenciamento de URLs e URLs amigáveis – Esclarecendo dúvidas, por Bruno Torres
Documentação do mod_rewrite, pelo Apache

 

Leonardo

Registros de Leonardo Faria sobre desenvolvimento web

 
  • Alan

    Olá!
    Comecei a utilizar esse método em meu site, mas encontro o seguinte problema: o que acontece quando a passagem de variáveis pela url for opcional?
    Exemplo:
    A página não precisa receber variáveis
    – página.php
    OU pode conter uma variável
    – página.php?var=texto
    OU pode conter mais de uma variável
    – página.php?var=texto&var2=texto2

    Na hora de reescrever a url, ele só atende a condição página.php?var=texto, e as outras não!
    Se pudesse me ajudar…!

    Obrigado!

  • Alan

    você pode sim não passar nenhum valor na url. Exemplo:
    RewriteRule ^(colunas)/(.+)$ index.php
    Independentemente do que será passado na URL, será redirecionado para index.php

    Espero ter ajuda. Abraço