SetEnvIfNoCase diretiva match ip failing

1

Estou tentando definir alguns cabeçalhos específicos com base no endereço IP do cliente por meio de um proxy reverso do Apache. Eu tento usar SetEnvIfNoCase / SetEnvIf mas de alguma forma eu não consigo escrever uma expressão regular correta: (

Aqui, o que eu tentei definir no httpd.conf (suponha que as diretivas de proxy reverso são ok - elas são):

SetEnvIfNoCase Remote_Addr "192\.168*" user_location_internal
RequestHeader set x-acme-user-location internal env=user_location_internal

Digamos que a solicitação venha de 192.168.1.100. Então a expressão regular deve coincidir - eu tentei em vários validadores online que afirmam ser perl compliant e 192.168.1.100 corresponde a "192.168 *". A documentação do SetEnvIf também afirma ser perl reg ex compliant.

No entanto, isso não funciona. A única sintaxe que funcionou foi a seguinte:

SetEnvIfNoCase Remote_Addr 192* user_location_internal
RequestHeader set x-acme-user-location internal env=user_location_internal

Em seguida, o cabeçalho é definido para que o problema seja de alguma forma relacionado à sintaxe da expressão regular. Então, meu melhor palpite é que eu não estou saindo corretamente do ponto. No entanto, de acordo com: link , a barra invertida é o símbolo correto para escapar dos metacaracteres.

Algum palpite do que está errado?

    
por vap78 15.05.2014 / 12:11

1 resposta

1

O regex para corresponder ao IP pode ser:

SetEnvIfNoCase Remote_Addr ^192\.168.* user_location_internal

Observe a parte .* . Sem o ponto, funciona porque 192* significa 192 zero ou mais vezes, o que corresponde ao Remote_Addr :

$ pcretest
PCRE version 8.33 2013-05-28

  re> /^192*/
data> 192.foo.bar.baz
 0: 192
  re> /^192\.168.*/
data> 192.168.12.12
 0: 192.168.12.12
data> 192.167.23.45
No match
    
por 15.05.2014 / 12:21