
Estoy intentando configurar algunos encabezados específicos según la dirección IP del cliente a través de un proxy inverso de Apache. trato de usarEstablecerEnvIfNoCase/SetEnvIfpero de alguna manera no logro escribir una expresión regular correcta :(
Esto es lo que intenté configurar en httpd.conf (supongamos que las directivas de proxy inverso están bien, lo están):
SetEnvIfNoCase Remote_Addr "192\.168*" user_location_internal
RequestHeader set x-acme-user-location internal env=user_location_internal
Digamos que la solicitud proviene de 192.168.1.100. Entonces se supone que la expresión regular coincide; lo probé en varios validadores en línea que afirman ser compatibles con Perl y 192.168.1.100 coincide con "192.168*". La documentación de SetEnvIf también afirma ser compatible con Perl Reg Ex.
Sin embargo, no funciona. La única sintaxis que funcionó fue la siguiente:
SetEnvIfNoCase Remote_Addr 192* user_location_internal
RequestHeader set x-acme-user-location internal env=user_location_internal
Luego, se establece el encabezado para que el problema esté relacionado de alguna manera con la sintaxis de la expresión regular. Así que mi mejor suposición es que no estoy escapando correctamente del punto. Sin embargo según:http://perldoc.perl.org/perlre.html#Regular-ExpressionsLa barra invertida es el símbolo correcto para escapar de los metacaracteres.
¿Alguna idea de qué está mal?
Respuesta1
La expresión regular para que coincida con la IP podría ser:
SetEnvIfNoCase Remote_Addr ^192\.168.* user_location_internal
Tenga en cuenta la .*
parte. Sin el punto, funciona porque 192*
significa 192
cero o más veces, lo que coincide con 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