Reputation: 294
I Love the new apache httpd 2.4 with lots of new cool stuff !
ap_expr is one of these new very promising features,
..BUT the following SSI snippet don't work as expected:
{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}}
{{set var="user" value="$1"}}
{{endif}}
The if is working BUT the var isn't set ! This doesn't make any sense.
error.log says:
.. AH01330: regex capture $1 is out of range
The doc (http://httpd.apache.org/docs/2.4/expr.html#other) is confusing and have no samples anywhere near.
I know that there is a legacy (workaround) switch for SSI.. but I don't want to use it since old Start- and End-tags are forced Legacy
Doing similar regex-parsing-tricks w SetEnvIfExpr is not helping either
Upvotes: 8
Views: 1403
Reputation: 1
{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/ && $1 =~ /(.+)/"}}
{{set var="user" value="$0"}}
{{endif}}
Upvotes: 0
Reputation: 690
by changing
{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}}
{{set var="user" value="$1"}}
{{endif}}
to
{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}}
{{set var="user" value="$0"}}
{{if expr="v('user') =~ /([^&]+)$/"}}
{{set var="user" value="$0"}}
{{endif}}
{{endif}}
one can work around the problem using the fact that $0 seems to work
Upvotes: 1
Reputation: 31035
According to the documentation:
Regular expression backreferences The strings $0 ... $9 allow to reference the capture groups from a previously executed, successfully matching regular expressions. They can normally only be used in the same expression as the matching regex, but some modules allow special uses.
You are using a capturing group and you are referencing that using index 1
, this should be ok using a standard regex engine, but according to the documentation you can reference from $0...$9
. I guess apache is filling the inde 0
with your capturing group instead of 1
and that's you get the regex capture $1 is out of range
Change the index $1
to $0
by using:
{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}}
{{set var="user" value="$0"}}
{{endif}}
Upvotes: 0