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, disponível em:
O módulo Apache
mod_rewrite é um poderoso e sofisticado conjunto de métodos que fornecem várias maneiras para a manipulação de URL's em uma requisição HTTP. Com ele, você pode fazer quase todos os tipos de reescrita de URL que você pode precisar num plano humano e no nível extraterrestre.
No entanto, a lógica deste módulo é (um pouco?) complexa e pode ser intimidante para o principiante. Existe uma tendência de tratar esse assunto e as regras de reescrita como um encanto mágico, e muitos acabam usando o recurso sem entender de fato o que estão fazendo. E, às vezes, o resultado não é o esperado por causa disso!
Essa documentação tenta dar os fundamentos necessários para o entendimento, de modo que, mais pessoas saibam o que está acontecendo quando copiam uma configuração encontrada na Internet ou em um fórum.
A manipulação de URL's pode ser entendida (e feita) em vários níveis de complexidade. Muitas vezes as suas tarefas podem não requerer todo o poder do módulo mod_rewrite.
Assim, para tarefas mais simples, o módulo
mod_alias pode resolver seu problema e o mapeamento de URL's pode ser suficiente para você. (
http://httpd.apache.org/docs/2.2/urlmapping.html).
Expressões regulares
O módulo mod_rewrite utiliza expressões regulares de acordo com a sintaxe definida pela API de Perl Compatible Regex (
http://pcre.org/). Observe que esse documento não é (nem de longe) uma referência completa sobre regex e fornecemos o embasamento mínimo para que você possa iniciar o uso do módulo. Entretanto, esse mínimo é suficiente para ver a magia acontecendo e sobreviver um pouco mais.
Os caracteres especiais de regex, apresentados a seguir, são os menores blocos de construção que você necessita, e são um bom lugar para começar um estudo sobre expressões regulares básicas:
Ponto (.) - Combina com um único caractere. Na expressão regular "v.l" o ponto combina com val, vol, vbl, v2l e qualquer coisa que tenha a sequência "v.l".
Adição (+) - Combina com o padrão anterior UMA ou MAIS vezes. Na expressão regular A+, as combinações possíveis são A, AA, AAA etc.
Asterisco (*) - Combina com o padrão anterior ZERO ou mais vezes. Na expressão regular A*, as combinações possíveis são A, AA, AAA etc ou ainda uma cadeia vazia (zero vezes A).
Interrogação (?) - Permite uma combinação opcional. Por exemplo, "colou?r" irá combinar com color e também com colour.
Circunflexo (^) - Chamado de âncora, esse sinal significa o INÍCIO de uma cadeia de caracteres. Por exemplo, "^ban" irá combinar com cadeias de caracteres que comecem com ban, como banana, banido ou banco.
Cifrão ($) - Essa é outra âncora, esse sinal significa o FIM de uma cadeia de caracteres. Por exemplo, "ana$" irá combinar com Mariana, Juliana e Poliana se essas palavras forem as últimas em uma cadeia de caracteres (antes do enter no fim da linha não poderá haver espaço em branco, pois espaço é um caractere). A cadeia "Quem comeu o queijo foi Mariana$" irá combinar, pois o $ representa o RETORNO DE CARRO (CR) na frase.
Parêntesis ( ) - Os parêntesis funcionam como um aglutinador unindo diversos caracteres em uma única unidade e usando esse valor como uma referência para combinações. Por exemplo, (ab)+ combinará abacate, abacaxi e abóbora.
Colchetes [ ] - Funcionam como um delimitador de grupo ou como uma classe. Cada elemento da classe é testado individualmente. Assim, c[uoa]t irá combinar com cut, cot e cat. Uma range como [a-z] ou [A-Z] pode ser utilizada aqui.
Colchetes Negados [^ ] - Inverte a lógica da classe criando uma regra de exceção. Por exemplo, "c[^a]t" irá combinar com cut, cot e qualquer coisa que não seja cat. Talvez seja útil para um cara que não goste de gatos!