2013-04-18 13 views
8

私は新しいを愛するapache httpd 2.4新しいクールなものがたくさん!httpd 2.4でApache regex backreferences unreachable?

ap_expr

..BUT以下SSIが期待通りに動作しませんスニペット、これらの新しい非常に有望な機能の一つである:

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

場合は、「ワーキングしかしVaRのISNされますセット!これは意味をなさない。

error.logファイルは言う:

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

DOC(http://httpd.apache.org/docs/2.4/expr.html#otherが)混乱で、のどこの近くにサンプルを持っていません。

私はSSIのためのレガシー(回避策)スイッチがあることを知っている..しかし、古いスタート - タグと終了タグは、同様の正規表現の構文解析を行うLegacy

を余儀なくされているので、私はそれを使用する必要はありませんSetEnvIfExprワット-tricksはdocumentationによると

+2

を動作するようですという事実使用して問題を回避することができ、「彼らは通常、一致する正規表現と同じ表現でのみを使用することができますが、いくつかのモジュールは、特別な用途を許可します。」それが問題だと思います。そのドメインが何であっても、その割り当てを「同じ」表現に合わせなければなりません。 –

答えて

0

のいずれかを支援されていません。

正規表現 文字列$ 0の後方参照... $ 9キャプチャグループを参照することを可能にします以前に実行された、正常に一致する正規表現から。正規表現は正規表現と同じ表現でしか使用できませんが、いくつかのモジュールでは特別な使い方が可能です。

あなたはキャプチャグループを使用していて、インデックス1を使用して、これは標準の正規表現エンジンを使用して[OK]をする必要がありますが、マニュアルに従ってあなたが$0...$9から参照できることを参照しています。私は、Apacheが1するのではなく、あなたのキャプチャグループとINDE 0を満たしていると思いますし、それはあなたが使用して$0regex capture $1 is out of range

変更インデックス$1を取得します:

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

そうだと思われますが、私はApacheの開発者がホイールを再発明するとは思わない! – hjpotter92

+0

@ hjpotter92 lol申し訳ありませんが...あなたがしたと思った –

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}} 

1は$ 0は

+0

人生はより安全です!(実際はそうではありませんが、これは私を助けました) – Mchl

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

これは他の回答のコードとほぼ同じコードの単なる一塊です。このコードを有用なものにするためには、それが何をしているのか、それがなぜその質問に答えるのかについての説明が必要です。それが他の回答のコードと非常に似ていることを考えると、なぜそれが彼らと異なるのかを説明する必要があります。 – AdrianHHH

関連する問題