序章

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

一時的なリダイレクト(応答ステータスコード 302 Found )は、URLを別の場所から一時的に提供する必要がある場合に役立ちます。 たとえば、サイトメンテナンスを実行している場合は、ドメインから説明ページへの一時的なリダイレクトを使用して、まもなく戻ってくることを訪問者に通知することができます。

一方、永続的なリダイレクト(応答ステータスコード 301永続的に移動)は、古いアドレスを完全に忘れて、もうアクセスを試みないようにブラウザに通知します。 これらは、ドメイン名を変更する場合など、コンテンツが恒久的に新しい場所に移動された場合に役立ちます。

サーバー構成ファイルのサーバーブロックエントリに次のような行を追加することで、Nginxで一時的なリダイレクトを作成できます。

rewrite ^/oldlocation$ http://www.newdomain.com/newlocation redirect;

同様に、永続的なリダイレクトには次のような行を使用します。

rewrite ^/oldlocation$ http://www.newdomain.com/newlocation permanent;

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

前提条件

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

  • Nginxがインストールされ、サーバーブロックを使用してWebサイトにサービスを提供するように設定された1台のサーバー。 Ubuntu 16.04 Debian 、または CentOS でNginxサーバーブロック(仮想ホスト)を設定する方法に従ってください。

ソリューションの概要

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

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

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

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

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

たとえば、www.domain1.com内のすべてのページをwww.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プレゼンスを確立していて、ドメインを新しいアドレスに変更したい場合は、古いドメインを単に放棄しないことが最善です。 あなたのサイトへのブックマークとインターネット上の他のページにあるあなたのサイトへのリンクは、あなたのコンテンツが新しい場所を見つける方法についてのブラウザへの指示なしに消えると壊れます。 リダイレクトせずにドメインを変更すると、サイトは以前の訪問者からのトラフィックを失います。

この例では、domain1.comという古いドメインからdomain2.comという新しいドメインへのリダイレクトを構成します。 古いドメインが削除され、今後すべてのトラフィックが新しいドメインに送信されるため、ここでは永続的なリダイレクトを使用します。

次のように、Nginxですでに構成されているdomain1.comという単一のドメインからサービスを提供するようにWebサイトを構成していると仮定します。

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

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

/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ディレクティブを使用して前述のリダイレクトを追加しました。 ^/(.*)$正規表現は、URLの/以降のすべてに一致します。 たとえば、http://domain1.com/index.htmlhttp://domain2.com/index.htmlにリダイレクトされます。 永続的なリダイレクトを実現するには、rewriteディレクティブの後にpermanentを追加するだけです。

注: systemctl restart nginxを使用して構成を変更した後は、必ずNginxを再起動してください。

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

場合によっては、サイトで既に公開され、トラフィックを受信している個々のページの名前を変更する必要があります。 名前だけを変更すると、元のURLにアクセスしようとする訪問者に404 Not Foundエラーが発生しますが、リダイレクトを使用することでこれを回避できます。 これにより、古いページをブックマークしたり、検索エンジンの古いリンクから見つけた人が、引き続き正しいページにアクセスできるようになります。

あなたのウェブサイトに、それぞれproducts.htmlservices.htmlという製品とサービスの2つの別々のページがあると想像してみてください。 ここで、これら2つのページをoffers.htmlという1つのオファーページに置き換えることにしました。 products.htmlおよびservices.htmlからoffers.htmlへの単純なリダイレクトを構成します。

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

元のサーバーブロック構成を想定
server {
    . . .
    server_name example.com www.example.com;
    . . .
}

リダイレクトの構成は、2つのRedirectディレクティブを使用するのと同じくらい簡単です。

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

rewriteディレクティブは、リダイレクトする必要のある元のアドレスと、新しいページの宛先アドレスを受け入れます。 ここでの変更は一時的なものではないため、ディレクティブでもpermanentを使用しました。 サイトのコンテンツを移動するときに、訪問者に不要なNot Foundエラーが表示されないようにするために、このようなリダイレクトをいくつでも使用できます。

結論

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

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

リダイレクトを正しく使用すると、現在のWebプレゼンスを活用しながら、必要に応じてサイト構造を変更できます。 訪問者をリダイレクトする方法について詳しく知りたい場合は、Nginxの公式ドキュメントの書き換えモジュールセクションとリダイレクトの作成に関する公式ブログ投稿に、このテーマに関する優れたドキュメントがあります。 ]。