前書き
HTTPリダイレクトは、1つのドメインまたはアドレスを別のドメインまたはアドレスに向ける方法です。 リダイレクトにはいくつかの種類があり、それぞれがクライアントブラウザとは異なるものを意味します。 最も一般的な2つのタイプは、一時的なリダイレクトと永続的なリダイレクトです。
一時的なリダイレクト_(応答ステータスコード* 302検出*)は、URLを一時的に別の場所から提供する必要がある場合に便利です。 たとえば、サイトのメンテナンスを実行している場合、ドメインから説明ページへの一時的なリダイレクトを使用して、すぐに戻ってくることを訪問者に知らせることができます。
Permanent redirects(応答ステータスコード* 301恒久的に移動*)は、古いアドレスを完全に忘れて、それ以上アクセスしないようにする必要があることをブラウザに通知します。 これらは、ドメイン名を変更するときなど、コンテンツが新しい場所に永久に移動されたときに役立ちます。
サーバー構成ファイルのサーバーブロックエントリに次のような行を追加することにより、Nginxで一時的なリダイレクトを作成できます。
rewrite ;
同様に、永続的なリダイレクトには次のような行を使用します。
rewrite ;
このガイドでは、Nginxで各種類のリダイレクトを実装する方法について詳しく説明し、特定のユースケースの例をいくつか紹介します。
前提条件
このチュートリアルを実行するには、次のものが必要です。
-
Nginxがインストールされ、サーバーブロックでWebサイトを提供するように設定された1つのサーバー。 https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-virtual-hosts-onでNginxサーバーブロック(仮想ホスト)をセットアップする方法に従ってください。 -ubuntu-16-04 [Ubuntu 16.04]、https://www.digitalocean.com/community/tutorials/how-to-setup-nginx-server-blocks-on-debian-7 [Debian]、またはhttps:/ /www.digitalocean.com/community/tutorials/how-to-set-up-nginx-virtual-hosts-server-blocks-on-centos-6[CentOS]。
ソリューションの概要
Nginxでは、組み込みの `+ rewrite +`ディレクティブを使用してほとんどのリダイレクトを実行できます。 このディレクティブは、Nginxの新規インストールでデフォルトで使用でき、一時リダイレクトと永続リダイレクトの両方を作成するために使用できます。 最も単純な形式では、少なくとも2つの引数を取ります。古いURLと新しいURLです。
サーバー設定で次の行を使用して一時的なリダイレクトを実装できます。
リライト付きの一時的なリダイレクト
server {
. . .
server_name www.domain1.com;
rewrite ^/$ http://www.domain2.com redirect;
. . .
}
このリダイレクトは、「+ www.domain1.com 」に対するすべてのリクエストを「 www.domain2.com 」にリダイレクトするようブラウザに指示します。 ただし、このソリューションは単一のページに対してのみ機能し、サイト全体に対しては機能しません。 複数のページをリダイレクトするには、代わりにhttps://www.digitalocean.com/community/tutorials/an-introduction-to-regular-expressions [正規表現]で ` rewrite +`ディレクティブを使用してディレクトリ全体を指定できます単一のファイルのみ。
`+ redirect `は括弧内の正規表現パターンに一致します。 次に、「 $ 1+」式を使用してリダイレクト先の一致したテキストを参照します。「+ 1+」は一致したテキストの最初のグループです。 より複雑な例では、後続の一致するグループに順番に番号が付けられます。
たとえば、 `+ www.domain 1.com `を含むすべてのページを一時的に ` www.domain 2.com +`にリダイレクトする場合、次を使用できます。
リライト付きの一時的なリダイレクト
server {
. . .
server_name www.domain1.com;
rewrite ^/(.*)$ http://www.domain2.com/$1 redirect;
. . .
}
server {
. . .
server_name www.domain2.com;
. . .
}
デフォルトでは、 `+ rewrite `ディレクティブは一時的なリダイレクトを確立します。 パーマネントリダイレクトを作成する場合は、ディレクティブの最後にある ` redirect `を ` permanent +`に置き換えて、次のように作成できます。
永続的なリダイレクト
rewrite ^/$ http://www.domain2.com ;
rewrite ^/(.*)$ http://www.domain2.com/$1 ;
いくつかの具体的な例に移りましょう。
例1-別のドメインへの移動
Webプレゼンスを確立していて、ドメインを新しいアドレスに変更したい場合は、古いドメインを放棄するのが最善です。 インターネット上の他のページにあるサイトへのブックマークとサイトへのリンクは、ブラウザに新しい場所を見つける方法についての指示なしにコンテンツが消えると壊れます。 リダイレクトせずにドメインを変更すると、サイトは以前の訪問者からのトラフィックを失います。
この例では、「+ domain1.com 」という古いドメインから「 domain2.com +」という新しいドメインへのリダイレクトを設定します。 ここでは、永続的なリダイレクトを使用します。これは、古いドメインが削除され、今後すべてのトラフィックが新しいドメインに移動するためです。
次のように、すでにNginxで設定されている「+ domain1.com +」という単一のドメインから提供されるようにWebサイトを設定していると仮定します。
/etc/nginx/sites-available/domain1.com
server {
. . .
server_name domain1.com;
. . .
}
また、「+ domain2.com +」で将来のバージョンのウェブサイトを既に提供していると仮定します。
/etc/nginx/sites-available/domain2.com
server {
. . .
server_name domain2.com;
. . .
}
`+ domain 1.com `サーバーブロック設定ファイルを変更して、永続的なリダイレクトを ` domain 2.com +`に追加します。
/etc/nginx/sites-available/domain1.com
server {
. . .
server_name domain1.com;
rewrite ^/(.*)$ http://domain2.com/$1 permanent;
. . .
}
`+ rewrite `ディレクティブを使用して、前述のリダイレクトを追加しました。 ` ^ /(。*)$ `正規表現は、URL内の ` / `の後のすべてに一致します。 たとえば、 ` http:// domain1.com / `は ` http:// domain2.com / `にリダイレクトされます。 永続的なリダイレクトを実現するには、 ` rewrite `ディレクティブの後に ` permanent +`を追加するだけです。
例2-単一のページ名の変更にもかかわらず永続的なエクスペリエンスを作成する
サイトで既に公開され、トラフィックを受信している個々のページの名前を変更する必要がある場合があります。 名前だけを変更すると、元のURLにアクセスしようとする訪問者に対して404 Not Foundエラーが発生しますが、リダイレクトを使用してこれを回避できます。 これにより、古いページをブックマークしたユーザー、または検索エンジンの古いリンクから見つけたユーザーが引き続き正しいページにアクセスできるようになります。
ウェブサイトに、それぞれ「+ products.html」と「+ services.html」と呼ばれる製品とサービス用の2つの個別のページがあるとします。 ここで、これらの2つのページを、代わりに + offers.html +`という単一のオファーページに置き換えることにしました。 `+ 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 ;
rewrite ;
. . .
}
`+ rewrite `ディレクティブは、リダイレクトする必要がある元のアドレスと新しいページの宛先アドレスを受け入れます。 ここでの変更は一時的なものではないため、ディレクティブでも ` permanent +`を使用しました。 サイトのコンテンツを移動するときに訪問者に不必要な「見つかりません」エラーが表示されないように、必要なだけリダイレクトを使用できます。
結論
これで、リクエストを新しい場所にリダイレクトする知識が得られました。 一時的なリダイレクトを不適切に使用すると、検索ランキングが低下する可能性があるため、必ず正しいリダイレクトタイプを使用してください。
安全なSSL接続の強制(i。 「+ http」ではなく「+ https」を使用して)、すべての訪問者がWebサイトの「+ www。+」プレフィックスアドレスのみで終了するようにします。
リダイレクトを正しく使用すると、現在のWebプレゼンスを活用しながら、必要に応じてサイト構造を変更できます。 訪問者をリダイレクトする方法について詳しく知りたい場合、Nginxには、公式のhttp://nginx.org/en/docs/http/ngx_http_rewrite_module.html[rewrite module]セクションに主題に関する優れたドキュメントがあります。ドキュメントとhttps://www.nginx.com/blog/creating-nginx-rewrite-rules/ [リダイレクトの作成に関する公式ブログ投稿]。