開発者ドキュメント

Nginxを使用して一時的および永続的なリダイレクトを作成する方法

序章

HTTPリダイレクトは、あるドメインまたはアドレスを別のドメインまたはアドレスにポイントする方法です。 リダイレクトにはいくつかの種類があり、それぞれがクライアントブラウザとは異なる意味を持っています。 最も一般的な2つのタイプは、一時的なリダイレクトと永続的なリダイレクトです。

一時的なリダイレクト(応答ステータスコード 302 Found )は、URLを別の場所から一時的に提供する必要がある場合に役立ちます。 For example, if you are performing site maintenance, you may wish to use a temporary redirect from your domain to an explanation page to inform your visitors that you will be back shortly.

一方、永続的なリダイレクト(応答ステータスコード 301永続的に移動)は、古いアドレスを完全に忘れて、もうアクセスを試みないようにブラウザに通知します。 These are useful when your content has been permanently moved to a new location, such as when you change domain names.

このガイドでは、Nginxで各種類のリダイレクトを実装する方法についてより詳細に説明し、特定のユースケースの例をいくつか紹介します。

前提条件

このチュートリアルに従うには、次のものが必要です。

ソリューションの概要

Nginxでは、組み込みの機能を使用してほとんどのリダイレクトを実行できます rewrite 指令。 このディレクティブは、Nginxの新規インストールでデフォルトで使用可能であり、一時的なリダイレクトと永続的なリダイレクトの両方を作成するために使用できます。 最も単純な形式では、古いURLと新しいURLの少なくとも2つの引数を取ります。

サーバー構成の次の行を使用して、一時的なリダイレクトを実装できます。

書き換えによる一時的なリダイレクト
server {
    . . .
    server_name www.domain1.com;
    rewrite ^/$ http://www.domain2.com redirect;
    . . .
}

このリダイレクトは、ブラウザにすべてのリクエストを送信するように指示します www.domain1.comwww.domain2.com. ただし、このソリューションは、サイト全体ではなく、単一のページでのみ機能します。 複数のページをリダイレクトするには、 rewrite 正規表現を使用して、単一のファイルだけでなくディレクトリ全体を指定するディレクティブ。

redirect 括弧内の正規表現パターンに一致します。 次に、を使用してリダイレクト先で一致したテキストを参照します $1 式、ここで 1 一致したテキストの最初のグループです。 より複雑な例では、後続の一致するグループに順番に番号が付けられます。

たとえば、内のすべてのページを一時的にリダイレクトしたい場合 www.domain1.comwww.domain2.com、次を使用できます。

書き換えによる一時的なリダイレクト
server {
    . . .
    server_name www.domain1.com;
    rewrite ^/(.*)$ http://www.domain2.com/$1 redirect;
    . . .
}

server {
    . . .
    server_name www.domain2.com;
    . . .
}

デフォルトでは、 rewrite ディレクティブは一時的なリダイレクトを確立します。 永続的なリダイレクトを作成したい場合は、置き換えることで作成できます redirectpermanent ディレクティブの最後に、次のようになります。

永続的なリダイレクト
rewrite ^/$ http://www.domain2.com permanent;
rewrite ^/(.*)$ http://www.domain2.com/$1 permanent;

いくつかの具体的な例に移りましょう。

例1—別のドメインへの移動

Webプレゼンスを確立していて、ドメインを新しいアドレスに変更したい場合は、古いドメインを単に放棄しないことが最善です。 あなたのサイトへのブックマークとインターネット上の他のページにあるあなたのサイトへのリンクは、あなたのコンテンツが新しい場所を見つける方法についてのブラウザへの指示なしに消えると壊れます。 Changing domains without redirecting will cause your site to lose traffic from previous visitors and older links.

この例では、という古いドメインからのリダイレクトを構成します domain1.com と呼ばれる新しいものに domain2.com. We’ll use permanent redirects here because the old domain will be deprecated, and all traffic should go to the new domain from now on.

あなたのウェブサイトがと呼ばれる単一のドメインから提供されるように構成されていると仮定しましょう domain1.com Nginxですでに次のように構成されています:

/etc/nginx/sites-available/domain1.com
server {
    . . .
    server_name domain1.com;
    . . .
}

また、次のWebサイトの将来のバージョンをすでに提供していることを前提としています。 domain2.com:

/etc/nginx/sites-available/domain2.com
server {
    . . .
    server_name domain2.com;
    . . .
}

変更しましょう domain1.com 永続的なリダイレクトを追加するサーバーブロック構成ファイル domain2.com:

/etc/nginx/sites-available/domain1.com
server {
    . . .
    server_name domain1.com;
    rewrite ^/(.*)$ http://domain2.com/$1 permanent;
    . . .
}

前述のリダイレクトを使用して追加しました rewrite 指令。 The ^/(.*)$ 正規表現は、 / URLで。 例えば、 http://domain1.com/index.html にリダイレクトされます http://domain2.com/index.html. 永続的なリダイレクトを実現するには、単に追加します permanent 後に rewrite 指令。

Note: Remember to test your configuration using nginx -t and then restart Nginx after you make your changes.

例2—単一ページ名の変更にもかかわらず永続的なエクスペリエンスを作成する

場合によっては、サイトで既に公開され、トラフィックを受信している個々のページの名前を変更する必要があります。 名前だけを変更すると、元のURLにアクセスしようとする訪問者に404 Not Foundエラーが発生しますが、リダイレクトを使用することでこれを回避できます。 This makes sure that people who have bookmarked your old pages or found them through outdated links on search engines will still reach the correct page.

Let’s assume your website had two separate pages for products and services called products.htmlservices.html それぞれ。 ここで、これら2つのページを1つのオファーページに置き換えることにしました。 offers.html 代わりは。 の単純なリダイレクトを構成します products.htmlservices.htmloffers.html.

Webサイトが次のように構成されていることを前提としています。

Original server block configuration
server {
    . . .
    server_name example.com www.example.com;
    . . .
}

Configuring the redirects is as simple as using two redirect directives.

元の構成に追加されたリダイレクト
server {
    . . .
    server_name example.com www.example.com;
    
    rewrite ^/products.html$ /offer.html permanent;
    rewrite ^/services.html$ /offer.html permanent;
    . . .
}

The rewrite ディレクティブは、リダイレクトする必要のある元のアドレスと、新しいページの宛先アドレスを受け入れます。 ここでの変更は一時的なものではないため、 permanent ディレクティブでも。 You can use as many redirects like this as you wish to make sure your visitors won’t see unnecessary 404 Not Found errors when moving site contents.

結論

これで、リクエストを新しい場所にリダイレクトする知識が得られました。 一時的なリダイレクトを不適切に使用すると検索ランキングが低下する可能性があるため、必ず正しいリダイレクトタイプを使用してください。

安全なSSL接続を強制するなど、HTTPリダイレクトには他にも複数の用途があります(つまり、 を使用して https それ以外の http)そして、すべての訪問者が www. Webサイトのプレフィックス付きアドレス。

Using redirects correctly will allow you to leverage your current web presence while giving you the ability to modify your site structure as necessary. 訪問者をリダイレクトする方法について詳しく知りたい場合は、Nginxの公式ドキュメントの書き換えモジュールセクションとリダイレクトの作成に関する公式ブログ投稿に、このテーマに関する優れたドキュメントがあります。 ]。

モバイルバージョンを終了