Apache正则表达式反向引用在httpd 2.4中是否可以访问?

kje*_*ldm 8 regex apache ssi server-side-includes mod-include

我喜欢新的apache httpd 2.4,有很多新的酷东西!

ap_expr是这些新的非常有前途的功能之一,

..但是以下SSI代码段不能按预期工作:

{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}} 
{{set var="user" value="$1"}} 
{{endif}}
Run Code Online (Sandbox Code Playgroud)

如果是工作,但该变种没有设置!这没有任何意义.

error.log说:

.. AH01330: regex capture $1 is out of range
Run Code Online (Sandbox Code Playgroud)

doc(http://httpd.apache.org/docs/2.4/expr.html#other)令人困惑,附近没有样本.

我知道SSI有一个遗留(变通方法)开关..但是我不想使用它,因为旧的开始和结束标签都是强制 遗留的

做类似的正则表达式解析 - 技巧SetEnvIfExpr也没有帮助

Fed*_*zza 0

根据文档

正则表达式反向引用 字符串 $0 ... $9 允许引用先前执行的、成功匹配的正则表达式中的捕获组。它们通常只能在与匹配正则表达式相同的表达式中使用,但某些模块允许特殊用途。

您正在使用捕获组,并且正在使用 index 引用该组1,使用标准正则表达式引擎应该没问题,但根据您可以参考的文档$0...$90我猜 apache 正在用您的捕获组填充索引,1而不是这样,您就得到了regex capture $1 is out of range

使用以下命令将索引更改$1为:$0

{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}} 
{{set var="user" value="$0"}} 
{{endif}}
Run Code Online (Sandbox Code Playgroud)