46

次のような URL がありwww.example.com/a/b/sth、Nginx 構成にロケーション ブロックを記述したとします。

location ^~ /a/b/(?<myvar>[a-zA-Z]+) {
    # use variable $myvar here
    if ($myvar = "sth") { ... }
}

ブロック内$myvarの URL からキャプチャされた変数を使用できるようにしたいと考えていますが、Nginx はこの変数が定義されておらず、開始されないことを通知し続けます。

nginx: [emerg] unknown "myvar" variable
4

4 に答える 4

68

古いスレッドですが、同じ問題がありました...

このエラーは、インストールされている PCRE のバージョンとは関係ないと思います

ロケーションタグが ~ で始まらない場合、NGINX は正規表現を解析しません。次のようなものを使用する必要があります。

location ~ ^/a/b/(?<myvar>[a-zA-Z]+) {
   # use variable $myvar here
   if ($myvar = "sth") { ... }
}
于 2013-05-08T02:04:41.443 に答える
15

Stefano Fratiniが彼の回答で正しく指摘したように、location宣言にはエラーがあります。~^~


名前付きキャプチャは PCRE の機能であり、異なるバージョンでは異なる構文を使用できます。使用する構文には?<var>、少なくとも PCRE 7.0 が必要です。

公式のNginxドキュメントで広範な情報を参照してください

于 2012-12-06T08:04:11.763 に答える
3

テストされていませんが、PCRE を使用してブロックを名前付き変数にキャプチャする正しい方法は (?P) です。したがって、あなたの例には P がありません。

于 2012-12-06T07:34:24.477 に答える