8

我喜欢新的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

使用 SetEnvIfExpr 做类似的正则表达式解析技巧也无济于事

4

3 回答 3

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 似乎有效这一事实来解决该问题

于 2015-04-20T07:57:27.710 回答
0

根据文档

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

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

使用以下方法将索引更改$1$0

{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}} 
{{set var="user" value="$0"}} 
{{endif}}
于 2015-04-08T19:45:54.140 回答
0
{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/ && $1 =~ /(.+)/"}} 
    {{set var="user" value="$0"}} 
{{endif}}
于 2015-09-30T13:02:43.727 回答