web-dev-qa-db-ja.com

疑問符「?」を一致させる方法nginx.confの場所の正規表現として

疑問符「?」と一致させたいのですがnginx.confの場所の正規表現として。

たとえば、一致させたいURLパターンは/ something?foo = 5または/ something?bar = 8(パラメーターのみ変更可能)です。

Nginxは [〜#〜] rcpe [〜#〜] を採用しているため、nginx.confに次のように場所を書き込むことができます。

location ~ ^/something\?.* {
}

上記はURLパターンと一致しません。どうやってやるの?

また、以下は私の期待ではありません。

location ~ ^/something?.* {
}

予想外の/ something_foo_bar_buzzと一致します。

16
bekkou68

nginxロケーションブロックがクエリ文字列とまったく一致しません。だからそれは不可能です。

ロケーション

このディレクティブは、URIに応じて異なる構成を許可します。

Nginxには、ロケーションブロックが照合される組み込み変数$ uriがあります。たとえば、リクエストを送信します

http://www.example.com/app/login.php?username=xyz&password=secret

$ uri値は次の文字列です。

 /app/login.php

query_stringはnginx変数$ argsに格納されます。

username=xyz&password=secret

何かをすること。クエリ文字列、次のようなことができます

if ($args ~ username=xyz) {
   # do something for requests with this query string
}

しかし注意してください、 IFは悪です

30
Chuan Ma