
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 192
zero 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