A diretiva SetEnvIfNoCase corresponde ao ip falhando

A diretiva SetEnvIfNoCase corresponde ao ip falhando

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

Aqui está o que tentei definir em httpd.conf (suponha que as diretivas de proxy reverso estejam ok - estã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 corresponder - tentei em vários validadores on-line que afirmam ser compatíveis com Perl e 192.168.1.100 corresponde a "192.168*". A documentação do SetEnvIf também afirma ser compatível com Perl reg ex.

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 esteja de alguma forma relacionado à sintaxe da expressão regular. Portanto, meu melhor palpite é que não estou escapando corretamente do ponto. Porém de acordo com:http://perldoc.perl.org/perlre.html#Regular-Expressionsbarra invertida é o símbolo correto para escapar de metacaracteres.

Algum palpite do que há de errado?

Responder1

A regex para corresponder ao IP poderia ser:

SetEnvIfNoCase Remote_Addr ^192\.168.* user_location_internal

Observe a .*parte. Sem o ponto funciona porque 192*significa 192zero ou mais vezes, o que corresponde a 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

informação relacionada