我喜欢新的 apache httpd 2.4 ,有很多新鲜的东西!
ap_expr是这些新的非常有前途的功能之一,
..但以下SSI代码段无法正常工作:
{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}}
{{set var="user" value="$1"}}
{{endif}}
if 正在工作但未设置var!这没有任何意义。
error.log说:
.. AH01330: regex capture $1 is out of range
文档(http://httpd.apache.org/docs/2.4/expr.html#other)令人困惑,没有样本。
我知道SSI有一个遗留(变通办法)开关..但我不想使用它,因为强制旧的开始和结束标记 Legacy < / p>
执行类似的正则表达式解析 - 技巧W SetEnvIfExpr也无济于事
答案 0 :(得分:1)
改变
{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}}
{{set var="user" value="$1"}}
{{endif}}
到
{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}}
{{set var="user" value="$0"}}
{{if expr="v('user') =~ /([^&]+)$/"}}
{{set var="user" value="$0"}}
{{endif}}
{{endif}}
使用$ 0似乎可以工作的事实可以解决问题
答案 1 :(得分:0)
正则表达式反向引用 字符串$ 0 ... $ 9允许从先前执行的成功匹配的正则表达式引用捕获组。它们通常只能在与匹配的正则表达式相同的表达式中使用,但某些模块允许特殊用途。
您正在使用捕获组,并且您使用索引1
来引用它,使用标准正则表达式引擎应该没问题,但根据您可以从$0...$9
引用的文档。我猜apache正在用您的捕获组填充inde 0
而不是1
,那就是regex capture $1 is out of range
使用以下内容将索引$1
更改为$0
{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}}
{{set var="user" value="$0"}}
{{endif}}
答案 2 :(得分:0)
{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/ && $1 =~ /(.+)/"}}
{{set var="user" value="$0"}}
{{endif}}