リダイレクトには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/
...
オプション1:
return 301 $scheme://$Host$request_uri;
まさにあなたが望むものです。
rewrite ^ http://$Host$request_uri? permanent;
行は、301ではなく302になります。これは、301を強制的に返す適切な構文です。
技術的には、両方のオプションを使用できます。彼らは働くことができます。
NGINXドキュメント によると、可能であればreturn
を使用します。 NGINXはリクエストの処理を停止するため(正規表現を処理する必要がないため)、シンプルで高速です。それ以上に、3xxシリーズのコードを指定できます。
return (301 | 302 | 303 | 307) url;
正規表現でURLを検証する必要がある、または元のURL内の要素(明らかに対応するNGINX変数にはない)をキャプチャする必要があるシナリオがある場合は、rewrite
を使用する必要があります。 rewrite
はコード301または302のみを返すことを知っている必要があります。
rewrite regex URL [flag];