紹介
HTTPリダイレクションは、1つのドメインやアドレスを別のものに向ける方法です。いくつかの異なる種類のリダイレクトがあり、それぞれがクライアントブラウザに対して異なる意味を持ちます。最も一般的なタイプは、一時的なリダイレクトと永続的なリダイレクトです。
一時的なリダイレクト(応答ステータスコード302 Found)は、URLを一時的に別の場所から提供する必要がある場合に役立ちます。たとえば、サイトのメンテナンスを実行している場合、一時的なリダイレクトを使用してドメインから説明ページにリダイレクトし、訪問者に間もなく戻ることを通知することができます。
一方、永続的なリダイレクト(応答ステータスコード301 Moved Permanently)は、ブラウザに古いアドレスを完全に忘れさせ、それ以上アクセスしようとしないようにすることを通知します。これらは、コンテンツが永久的に新しい場所に移動した場合など、新しいドメイン名に変更する場合などに役立ちます。
このガイドでは、Nginxで各種のリダイレクトを実装する方法の詳細な説明と、特定のユースケースの例をいくつか紹介します。
前提条件
このチュートリアルに従うには、次のものが必要です:
- A server with Nginx installed and set up to serve your website(s). You can find some examples and instructions on the tutorials for Ubuntu 22.04, Debian, or CentOS.
一目でわかる解決策
Nginxでは、ビルトインのrewrite
ディレクティブを使用して、ほとんどのリダイレクトを実行できます。このディレクティブは、新しいNginxインストールではデフォルトで利用可能であり、一時的なリダイレクトと永続的なリダイレクトの両方を作成するために使用できます。最も単純な形式では、少なくとも2つの引数を取ります。古いURLと新しいURLです。
次の行をサーバー構成に追加することで、一時的なリダイレクトを実装できます:
このリダイレクトは、ブラウザにwww.domain1.com
へのすべてのリクエストをwww.domain2.com
に転送するよう指示します。ただし、この解決策は単一のページに対してのみ機能し、サイト全体には適用されません。複数のページにリダイレクトするには、rewrite
ディレクティブを使用し、単一のファイルではなくディレクトリ全体を指定する正規表現を使用できます。
redirect
は、カッコ内の正規表現パターンに一致します。その後、一致したテキストを$1
式を使ってリダイレクト先で参照します。ここで、1
は一致したテキストの最初のグループを示します。より複雑な例では、後続の一致したグループには順番に番号が割り当てられます。
たとえば、www.domain1.com
内のすべてのページを一時的にwww.domain2.com
にリダイレクトしたい場合、次のようにします:
デフォルトでは、rewrite
ディレクティブは一時リダイレクトを確立します。恒久的なリダイレクトを作成したい場合は、ディレクティブの最後にredirect
をpermanent
で置き換えることで行うことができます。次のようにしてください:
さて、具体的な例に移りましょう。
例1 — 別のドメインに移動する
ウェブプレゼンスを確立し、ドメインを新しいアドレスに変更したい場合、古いドメインを放置せずに済みます。コンテンツが新しい場所を見つける方法に関するブラウザへの指示がないまま古いコンテンツが消えると、インターネット上の他のページにあるあなたのサイトへのブックマークやリンクが壊れます。リダイレクトせずにドメインを変更すると、以前の訪問者や古いリンクからのトラフィックを失うことになります。
この例では、古いドメインdomain1.com
から新しいドメインdomain2.com
へのリダイレクトを設定します。古いドメインは廃止され、今後はすべてのトラフィックが新しいドメインに移動するように、ここでは永続的なリダイレクトを使用します。
既にNginxで設定されているdomain1.com
からサービスを提供しているウェブサイトがあると仮定します:
また、将来のバージョンのウェブサイトをdomain2.com
で提供していると仮定します。
domain1.com
のサーバーブロック構成ファイルを変更して、domain2.com
への永続的なリダイレクトを追加しましょう:
前述のリダイレクトをrewrite
ディレクティブを使用して追加しました。^/(.*)$
正規表現はURLの/
の後にあるすべてに一致します。たとえば、http://domain1.com/index.html
はhttp://domain2.com/index.html
にリダイレクトされます。永続的なリダイレクトを実現するには、rewrite
ディレクティブの後にpermanent
を追加するだけです。
注意:変更を行った後はnginx -t
を使用して設定をテストし、Nginxを再起動してください。
例2 — 単一ページ名の変更にもかかわらず永続的なエクスペリエンスの作成
時々、既に公開され、サイトでトラフィックを受け取った個々のページの名前を変更する必要があります。名前だけを変更すると、元のURLにアクセスしようとする訪問者に404 Not Foundエラーが発生しますが、リダイレクトを使用することでこれを回避できます。これにより、古いページをブックマークしたり、検索エンジンの古いリンクを通じて見つけた人々が依然として正しいページに到達できるようになります。
ウェブサイトには、それぞれproducts.html
とservices.html
という製品とサービスのための2つの別々のページがあると仮定しましょう。今、これら2つのページを代わりにoffers.html
という単一のオファーページに置き換えることにしました。我々はproducts.html
とservices.html
のシンプルなリダイレクトをoffers.html
に設定します。
ウェブサイトが次のように設定されていると仮定します:
リダイレクトの設定は、2つのリダイレクトディレクティブを使用するだけです。
rewrite
ディレクティブは、リダイレクトされる元のアドレスと新しいページの宛先アドレスの両方を受け入れます。ここでの変更は一時的なものではないため、ディレクティブにpermanent
を使用しました。サイトのコンテンツを移動する際に不要な404 Not Foundエラーが表示されないようにするために、必要な数だけこのようなリダイレクトを使用できます。
結論
新しい場所へのリクエストのリダイレクトを行うための知識が得られました。適切なリダイレクトタイプを使用することを確認してください。一時的なリダイレクトの誤った使用は、検索ランキングに影響を与える可能性があります。
HTTPリダイレクトの他の複数の使用方法があります。これには、セキュアなSSL接続を強制する(つまり、http
の代わりにhttps
を使用する)ことや、すべての訪問者がウェブサイトのwww.
を接頭辞とするアドレスにのみ移動することが含まれます。
リダイレクトを正しく使用すると、現在のウェブプレゼンスを活用しながら、必要に応じてサイト構造を変更できます。訪問者をリダイレクトする方法について詳しく学びたい場合は、Nginxの公式ドキュメントのrewrite moduleセクションとリダイレクトの作成に関する公式ブログ記事を参照してください。