Como posso saber com o que o RewriteRule está testando?

1

Dada a seguinte regra de reescrita do Apache:

RewriteRule .* foo

... como eu descubro precisamente em qual string * está testando? Suponha que qualquer número de regras de reescrita arbitrárias poderia ter sido aplicado antes deste ponto, e que eu não tenho como saber quais são (suponha que o httpd.conf esteja oculto de mim).

EDIT: Obrigado, embora tenha em mente que eu não tem acesso para editar (ou mesmo ler!) httpd.conf. Eu só tenho arquivos .htaccess à minha disposição.

    
por dirtside 22.06.2009 / 22:56

4 respostas

3

EDIT : solução removida que precisava do acesso httpd.conf

Isso funcionará, basta colocá-lo na linha antes de sua regra de reescrita:

RewriteRule (.*) - [ENV=MYREWRITERULETEST:$1]

Em um arquivo .ssi ou .cgi, imprima essa variável.

As tentativas de ver outras variáveis não lhe dirão necessariamente a correspondência da sua regra; eles lhe dirão o que foi correspondido antes que qualquer regra de regravação seja executada ou como as coisas se pareçam depois que todas as regras de regravação forem executadas.

    
por 22.06.2009 / 23:04
1

mod_rewrite usa expressões regulares para identificar uma sequência específica e, em seguida, reescreve essa correspondência com a substituição fornecida. No caso do seu exemplo:

RewriteRule .* foo

mod_rewrite irá corresponder a qualquer caractere (é o que o "." significa), quantas vezes ele repetir (assim o "*"). Agora, como "*" está repetindo ".", Isso significa que ele corresponderá a qualquer string com qualquer caractere de qualquer combinação e comprimento. Então, vai substituir aquele tamanho grande, qualquer com "foo".

Então, para usar o mod_rewrite, você precisa ter pelo menos uma compreensão básica de expressões regulares, bem como um entendimento completo do que é que você deseja combinar e reescrevê-lo como.

Eu geralmente uso um programa pequeno como Reggy ou Kiki para me ajudar a organizar minha expressão regular. Você pode achar isso útil também.

Espero que isso ajude.

    
por 23.06.2009 / 03:32
0

Se você tivesse acesso ao httpd.conf, esta resposta descreve como ativar o logging do mod_rewrite, que lhe dará exatamente o que você deseja.

Se você tiver acesso ao arquivo .htaccess no sistema de arquivos que está sendo exibido, poderá fazer as alterações de configuração lá para ativar o registro.

Caso contrário, tentativa e erro podem ser sua melhor aposta!

    
por 22.06.2009 / 23:07
0

Sei que este é um cabeçalho no IIS, não sei sobre o Apache, mas o cabeçalho UNENCODED_URL ou HTTP_URL pode fornecer a URL do lado do servidor se você consultá-lo no script do servidor (ASP / PHP / whatever ).

Você pode usar isso para rastrear a regra no .htaccess

    
por 22.06.2009 / 23:29