web-dev-qa-db-ja.com

nginxhttpマップモジュールの正規表現変数

HttpMapModuleドキュメント は次のように述べています。

1.0.4以降、パターンの前に〜*を付けることで、大文字と小文字を区別しない正規表現を使用できます。

そして例を挙げます:

map $uri $myvalue {
    /aa                   /mapped_aa;
    ~^/aa/(?<suffix>.*)$  $suffix;
}

これを利用するためにnginx/1.2.7に更新しました。ナイーブな正規表現は問題なく機能しますが、変数は機能しません。上記の構文を試してみると、エラーが発生します。

nginx: [emerg] pcre_compile() failed: unrecognized character after (?< in "^/aa/(?<suffix>.*)$" at "suffix>.*)$"

次の構文も試しましたが、どれも機能しませんでした。

~^(.*)$  $1;
~^(.*)$  \1;

しかし、どちらも機能しませんでした。

HttpMapModuleの正規表現で変数を機能させる方法を知っている人はいますか?

1
Robin Winslow

(?P<name>pattern)は、名前付きキャプチャグループの標準のPCRE構文です。ドキュメントにはPがありません。

ウィキペディアの「名前付きサブパターン」セクション(?<name>...)および(?'name'...) PCRE7.0以降で有効です。おそらく、あなたのバージョンのnginxは以前のバージョンのPCREに対してリンクされています。

8
nickgrim