Nginxで一時的および永続的リダイレクトを作成する方法

紹介

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です。

次の行をサーバー構成に追加することで、一時的なリダイレクトを実装できます:

Temporary redirect with rewrite
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にリダイレクトしたい場合、次のようにします:

Temporary redirect with rewrite
server {
    . . .
    server_name www.domain1.com;
    rewrite ^/(.*)$ http://www.domain2.com/$1 redirect;
    . . .
}

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

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

Permanent redirects
rewrite ^/$ http://www.domain2.com permanent;
rewrite ^/(.*)$ http://www.domain2.com/$1 permanent;

さて、具体的な例に移りましょう。

例1 — 別のドメインに移動する

ウェブプレゼンスを確立し、ドメインを新しいアドレスに変更したい場合、古いドメインを放置せずに済みます。コンテンツが新しい場所を見つける方法に関するブラウザへの指示がないまま古いコンテンツが消えると、インターネット上の他のページにあるあなたのサイトへのブックマークやリンクが壊れます。リダイレクトせずにドメインを変更すると、以前の訪問者や古いリンクからのトラフィックを失うことになります。

この例では、古いドメインdomain1.comから新しいドメインdomain2.comへのリダイレクトを設定します。古いドメインは廃止され、今後はすべてのトラフィックが新しいドメインに移動するように、ここでは永続的なリダイレクトを使用します。

既にNginxで設定されているdomain1.comからサービスを提供しているウェブサイトがあると仮定します:

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

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

注意:変更を行った後はnginx -tを使用して設定をテストし、Nginxを再起動してください。

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

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

ウェブサイトには、それぞれproducts.htmlservices.htmlという製品とサービスのための2つの別々のページがあると仮定しましょう。今、これら2つのページを代わりにoffers.htmlという単一のオファーページに置き換えることにしました。我々はproducts.htmlservices.htmlのシンプルなリダイレクトをoffers.htmlに設定します。

ウェブサイトが次のように設定されていると仮定します:

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

リダイレクトの設定は、2つのリダイレクトディレクティブを使用するだけです。

Redirects added to the original configuration
server {
    . . .
    server_name example.com www.example.com;
    
    rewrite ^/products.html$ /offer.html permanent;
    rewrite ^/services.html$ /offer.html permanent;
    . . .
}

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

結論

新しい場所へのリクエストのリダイレクトを行うための知識が得られました。適切なリダイレクトタイプを使用することを確認してください。一時的なリダイレクトの誤った使用は、検索ランキングに影響を与える可能性があります。

HTTPリダイレクトの他の複数の使用方法があります。これには、セキュアなSSL接続を強制する(つまり、httpの代わりにhttpsを使用する)ことや、すべての訪問者がウェブサイトのwww.を接頭辞とするアドレスにのみ移動することが含まれます。

リダイレクトを正しく使用すると、現在のウェブプレゼンスを活用しながら、必要に応じてサイト構造を変更できます。訪問者をリダイレクトする方法について詳しく学びたい場合は、Nginxの公式ドキュメントのrewrite moduleセクションとリダイレクトの作成に関する公式ブログ記事を参照してください。

Source:
https://www.digitalocean.com/community/tutorials/how-to-create-temporary-and-permanent-redirects-with-nginx