[英]How to access regex back reference in Apache 2.4 if statement
我正在尝试处理注入的特定请求标头,并剥离特定值,并使用该值设置新的请求标头。
现有的标题看起来像这样,我想进入实际的clientip
OSGD-Signed-Data="clientip=xxxx;gateway-features=routing-token-nocert,gateway-http-upgrade;timestamp=1532711365214"
所以我用正则表达式创建了一个<If>语句
<If "%{http:OSGD-Signed-Data} =~ /clientip=([^;]*);/"> RequestHeader set X-Client-IP $0 </If>
哪个匹配,但我不知道如何使用反向引用来设置新标题
这似乎不可能直接实现 。 用于expr的Apache 2.4文档指出:
字符串$ 0 ... $ 9允许引用先前执行的,成功匹配正则表达式的捕获组。 它们通常只能与匹配的正则表达式在同一表达式中使用,但是某些模块允许特殊用途。
我通过在<If>
使用SetEnvIf
解决了这个问题。 您的配置如下所示:
<If "%{http:OSGD-Signed-Data} =~ /clientip=([^;]*);/">
SetEnvIf OSGD-Signed-Data clientip=([^;]*); CLIENT_IP=$1
RequestHeader set X-Client-IP %{CLIENT_IP}e
</If>
这样做的缺点是,需要两次指定正则表达式(因此也要对其进行两次评估),一次是在<If>
表达式中,另一次是在SetEnvIf
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.