繁体   English   中英

如何在Apache 2.4 if语句中访问正则表达式回引用

[英]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>

哪个匹配,但我不知道如何使用反向引用来设置新标题

这似乎不可能直接实现 用于exprApache 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM