SetEnvIfNoCase指令匹配ip失败

我试图通过一个Apache反向代理基于客户端IP地址设置一些特定的标题。 我尝试使用SetEnvIfNoCase / SetEnvIf,但我不知道怎么写一个正确的正则expression式🙁

这里我试图在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。 然后正则expression式应该匹配 – 我尝试了几个在线validation器声称是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 

然后设置头文件,这个问题与正则expression式语法有关。 所以我最好的猜测是,我没有正确地逃脱这个点。 但根据: http : //perldoc.perl.org/perlre.html#Regular-Expressions反斜杠是转义元字符的正确符号。

任何猜测什么是错的?

匹配IP的正则expression式可以是:

 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