SetEnvIfNoCase 指令匹配 ip 失败

SetEnvIfNoCase 指令匹配 ip 失败

我正在尝试通过 Apache 反向代理根据客户端 IP 地址设置一些特定的标头。我尝试使用设置EnvIfNoCase/设置EnvIf但我不知何故没能写出正确的正则表达式:(

这是我尝试在 httpd.conf 中设置的内容(假设反向代理指令没有问题 - 它们是可以的):

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

假设请求来自 192.168.1.100。那么正则表达式应该匹配 - 我在几个声称符合 perl 标准的在线验证器中尝试过,192.168.1.100 与“192.168*”匹配。SetEnvIf 的文档也声称符合 perl reg ex。

但是它不起作用。唯一有效的语法如下:

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

然后设置了标题,因此问题在某种程度上与正则表达式语法有关。所以我最好的猜测是我没有正确地转义点。然而根据:http://perldoc.perl.org/perlre.html#Regular-Expressions反斜杠是转义元字符的正确符号。

猜猜哪里出了问题?

答案1

匹配 IP 的正则表达式可以是:

SetEnvIfNoCase Remote_Addr ^192\.168.* user_location_internal

注意这.*部分。没有点,它仍然有效,因为192*表示192零次或多次,这与 匹配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

相关内容