Apache 2.2 - Introdução ao módulo mod_rewrite

Esse artigo é uma tradução livre e modificada da documentação "Apache mod_rewrite Introduction", que faz parte da documentação da versão 2.2 do Apache.

[ Hits: 50.243 ]

Por: Perfil removido em 15/01/2013


O básico de RewriteRule



A diretiva RewriteRule é o verdadeiro cavalo de força da reescrita de URL. A ordem que essas diretivas aparecem em seu arquivo de configuração importa. Em tempo de execução a regra de reescrita que for aplicada primeiro modifica a URL a partir deste ponto adiante. Uma típica URL-FULL possui o seguinte formato:

http://server:port/path/program?query_string

Suas partes são:
  • http ou https representam o protocolo chamado de esquema (scheme);
  • server é o nome da máquina servidora, também chamado de hostname;
  • port é a porta TCP padrão, que pode ser omitida na URL se for 80;
  • /path/program é o caminho web até um recurso chamado de URL-PATH;
  • ?query_string é uma consulta de dados ou passagem de parâmetros.

A sintaxe de RewriteRule consiste de três argumentos separados por espaços.

1. A regex (Pattern) define quais URL's são afetadas pela regra;

2. Substituição (Substitution) - A porção que irá substituir outra, dentro da URL, quando a URL original combinar com a regex (Pattern);

3. Sinalizadores (Flags) - São opcionais e afetam a requisição reescrita.

A diretiva RewriteRule funciona em todos os contextos (server config, virtual host, directory, .htaccess) e permite sobrescrita no grupo FileInfo.

O valor para Pattern é uma regex que inicialmente é comparada contra uma URL-PATH contida na requisição de entrada ou ainda sobre a saída da primeira regra RewriteRule, onde a substituição ocorrer. URL-PATH é a porção da URL após o esquema (http://) e do hostname, mas anterior ao inicio de uma consulta (?query_string). Um ponto de interrogação marca o início do campo consulta.

Num contexto de diretório, uma URL-PATH é equivalente ao caminho relativo do diretório no sistema de arquivos para o qual uma regra é definida. Uma vez que a substituição ocorreu, as regras seguintes são aplicadas sobre a URL modificada pela diretiva RewriteRule anterior, permitindo uma cascata de modificações posteriores. Isso pode ficar confuso em algum momento!

Observe que se você deseja combinar contra a porção do hostname, da porta TCP ou porções da consulta (?query_string), então a diretiva RewriteCond deve ser utilizada com %{HTTP_HOST}, %{SERVER_PORT} e %{QUERY_STRING}, respectivamente.

Observe o modelo de funcionamento da diretiva RewriteRule:
Pattern - É a expressão regular (regex) que você deseja checar contra uma URL enviada em uma requisição HTTP. Em uma URI, tudo que vier após o esquema e do nome do host (http://hostname) é comparado contra Pattern, exceto o conteúdo de query_string.

Substitution - O valor contido aqui pode assumir quatro funções diferentes:
  1. Um novo valor para Pattern;
  2. Um caminho absoluto para um arquivo no filesystem;
  3. Uma URL completa redirecionando a requisição para outro lugar;
  4. Um traço (dash) que indica para não fazer NADA!

[Flags] - Sinalizadores especiais que podem assumir DIVERSOS valores e que realizam ações como, por exemplo, definir variáveis, cabeçalhos de controle, redirecionar ou negar acesso. São vários sinalizadores e alguns deles podem ser combinados entre si.

Exemplos de RewriteRule

Um caminho absoluto para um recurso no sistema de arquivos como:

RewriteRule ^/games.* /usr/local/games/web

Isso mapeia uma solicitação para um local arbitrário em seu sistema de arquivos, como faz a diretiva Alias.

Um caminho Web para um recurso como:

RewriteRule ^/foo$ /bar

Se a diretiva DocumentRoot é configurada para /usr/local/apache2/htdocs, então essa regra faria o mapeamento da requisição http://exemplo.com/foo para o caminho /usr/local/apache2/htdocs/bar.

Uma URL absoluta:

RewriteRule ^/product/view$ http://site2.example.com/seeproduct.html [R]

Essa regra diz ao cliente (navegador) para refazer a requisição para um outro endereço (redirecionamento). O sinalizador [R] significa redirecionamento com código de erro HTTP igual a 302. Outros códigos HTTP podem ser especificados explicitamente como [R=301] ou [R=304].

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. O básico de RewriteRule
   3. O básico de RewriteCond
   4. Backreferences
Outros artigos deste autor

Qmail + Patches + Performance Tuning, the Debian AMD64 way

Criando um álbum de fotos no Linux

Um tour pelos ripadores de CDs para Linux

Incrementando as funções do KDE com "servicemenus"

Modem HSP 56 MR no Fedora Core 1

Leitura recomendada

Integrando Apache 2 com Tomcat 5

1º Fórum da Internet no Brasil

Avaliando as dicas de segurança do Banco do Brasil

SFTP Server com SSH, Chroot e Rsyslog

Implementação de VPN com OpenVPN

  
Comentários
[1] Comentário enviado por cromado em 15/01/2013 - 15:13h

Muito bom artigo. 10.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts