web-dev-qa-db-ja.com

Nginx-書き換えのためにリダイレクトするか、リダイレクトのために戻る?

リダイレクトには2つのオプション(returnとrewrite)がありますが、パフォーマンスやSEOなどに推奨される方法はわかりません。

## Redirect from non-www to www
server {
        server_name example.com;
        # Option 1
        return 301 $scheme://$Host$request_uri;

        # Option 2
        rewrite ^ http://$Host$request_uri? permanent;
    }

## Default server config

server {
        ...
        listen      192.168.1.1:80 default_server;
        root        /www;
        server_name www.example.com;

オプション2はcurlで機能するようですが、ブラウザーから呼び出されたときにリダイレクトされず、rewriteディレクティブがpermanentに設定されているにもかかわらず、戻りコードは一時的なリダイレクトのコードです。

 curl -I example.com
 HTTP/1.1 302 Moved Temporarily
 Server: nginx
 ...
 Location: http://www.example.com/
 ...
20
HTF

オプション1:

return 301 $scheme://$Host$request_uri;

まさにあなたが望むものです。

rewrite ^ http://$Host$request_uri? permanent;行は、301ではなく302になります。これは、301を強制的に返す適切な構文です。

18
Gnarfoz

技術的には、両方のオプションを使用できます。彼らは働くことができます。

NGINXドキュメント によると、可能であればreturnを使用します。 NGINXはリクエストの処理を停止するため(正規表現を処理する必要がないため)、シンプルで高速です。それ以上に、3xxシリーズのコードを指定できます。

return (301 | 302 | 303 | 307) url;

正規表現でURLを検証する必要がある、または元のURL内の要素(明らかに対応するNGINX変数にはない)をキャプチャする必要があるシナリオがある場合は、rewriteを使用する必要があります。 rewriteはコード301または302のみを返すことを知っている必要があります。

rewrite regex URL [flag];

return および rewrite の詳細については、NGINX Webサイトを参照してください。

5
Maxime