nginxのrewriteにおけるリクエストURLのクエリ文字列の扱い

投稿日:

あんまり詳しくないのでメモ。

例えば、nginxの設定ファイルで、次の様にrewriteの設定している。

rewrite ^/category/orange/8/?$  /xyz.cgi?__mode=list&_type=index&category_id=107 last;

これで、ウェブブラウザのアドレスバーから次のURLをリクエストする。

http://hoge.com/category/orange/8/?relative=1&sort=4&limit=18

すると、ウェブブラウザのアドレスバーの入力内容の表示は変わらず、次のURLが開く形となる。

http://hoge.com/category/orange/8/xyz.cgi?__mode=list&_type=index&category_id=107&relative=1&sort=4&limit=18

つまり、前述のリダイレクト設定で指定したリダイレクト先「/xyz.cgi?__mode=list&_type=index&category_id=107」に、リクエストしたURLのクエリ「&relative=1&sort=4&limit=18」が付加されるたURLが開く形となる。

なお、この時のnginxのログを見ると、次のような感じで、リクエスト元URLについて、クエリ文字列が除外された形でrewriteによるマッチングがされている事が分かる。

2018/05/10 18:50:42 [notice] 25071#0: *84661 "^/category/orange/8/?$" matches "/category/orange/8/", client: xx.xxx.xxx.xxx, server: hoge.com, request: "GET /category/orange/8/?relative=1&sort=4&limit=18 HTTP/1.1", host: "hoge.com", referrer: "http://hoge.com/category/orange/8/?relative=1&sort=3&limit=18"

※なお、nginxでrewriteのログを取得する際は設定が必要。次の記事が参考になった。

Nginx rewriteのログを表示する - chulip.org
http://chulip.org/entry/2014/11/28/021038

あとApacheによるrewriteの場合も同じような扱いと聞いたことがあるが、こちらは不勉強なのでまたの機会に。

関連するタグ

関連するタグは現在ありません。