8

新しいクールな要素がたくさんある新しいapache httpd 2.4が大好きです!

ap_exprは、非常に有望な新機能の 1 つです。

..しかし、次の SSI スニペットは期待どおりに機能しません。

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

ifは機能していますが、変数が設定されていません! これは意味がありません。

error.log は言う:

.. AH01330: regex capture $1 is out of range

ドキュメント ( http://httpd.apache.org/docs/2.4/expr.html#other )はわかりにくく、近くにサンプルがありません。

SSI 用のレガシー(回避策) スイッチがあることは知っていますが、古い開始タグと終了タグが強制されているため、使用したくありません。

同様の regex-parsing-tricks w 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...$9。私はApacheがあなたの0代わりにあなたのキャプチャグループで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 に答える