web-dev-qa-db-ja.com

クエリ文字列を使用したnginx 301リダイレクト

現在、私はnginx.confファイルにこのようなものがあります:

location ~ /old/page/?$ {
    return 301 /new-page;
}

問題は、クエリ文字列が/ old/page?ref = xx URLから削除されていることです。

上記で使用しているリダイレクトメソッドを使用してクエリ文字列を含めることはできますか?

11
Tom Usborne

?以降はクエリ文字列であり、locationおよびrewriteディレクティブで使用される正規化されたURIの一部ではありません。詳細は このドキュメント を参照してください。

クエリ文字列を保持する場合は、returnに追加します。

location = /old/page/ {
    return 301 /new/page$is_args$args;
}

または、rewriteを使用すると、?が追加されない限り、クエリ文字列が自動的に追加されます。

rewrite ^/old/page/$ /new/page permanent;

場所の構文については this document を、戻り値/書き換えについては this document を参照してください。

20
Richard Smith