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の場合も同じような扱いと聞いたことがあるが、こちらは不勉強なのでまたの機会に。
関連するタグ
関連するタグは現在ありません。