前書き

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

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

Permanent redirects(応答ステータスコード* 301恒久的に移動*)は、古いアドレスを完全に忘れて、それ以上アクセスしないようにする必要があることをブラウザに通知します。 これらは、ドメイン名を変更するときなど、コンテンツが新しい場所に永久に移動されたときに役立ちます。

サーバー構成ファイルの仮想ホストエントリに次のような行を追加することにより、Apacheで一時的なリダイレクトを作成できます。

Redirect

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

Redirect permanent

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

前提条件

このチュートリアルを実行するには、次のものが必要です。

  • Apache 2がインストールされ、仮想ホストでWebサイトを提供するように設定された1つのサーバー。 UbuntuでApache仮想ホストを設定する方法に従ってください16.04]、https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-centos-7 [on CentOS 7]、またはhttps://www.digitalocean .com / community / tutorials / how-to-set-up-apache-virtual-hosts-on-debian-7 [Debian 7]。

ソリューションの概要

Apacheでは、 `+ Redirect `ディレクティブを使用して単純な単一ページのリダイレクトを実現できます。これは、Apacheの新規インストールでデフォルトで有効になっている ` mod_alias +`モジュールに含まれています。 このディレクティブは、古いURLと新しいURLの少なくとも2つの引数を取り、一時リダイレクトと永続リダイレクトの両方を作成するために使用できます。

最も単純な形式では、サーバー構成で次の行を使用して一時的なリダイレクトを実行できます。

リダイレクトを使用した一時的なリダイレクト

<VirtualHost *:80>
   ServerName www.domain1.com
   Redirect / http://www.domain2.com
</VirtualHost>

<VirtualHost *:80>
   ServerName www.domain2.com
   . . .
</VirtualHost>

このリダイレクトは、「+ www.domain1.com 」に対するすべてのリクエストを「 www.domain2.com +」にリダイレクトするようブラウザに指示します。 ただし、このソリューションは単一のホームページでのみ機能し、サイト全体では機能しません。

複数のページをリダイレクトするには、https://www.digitalocean.com/community/tutorials/an-introduction-to-regular-expressions [正規表現]を使用して全体を指定する `+ RedirectMatch `ディレクティブを使用できます単一のファイルではなくディレクトリ。 ` RedirectMatch `は、括弧内の正規表現パターンに一致し、 ` $ 1 `式を使用してリダイレクト先の一致したテキストを参照します。ここで、 ` 1 +`は一致したテキストの最初のグループです。 より複雑な例では、後続の一致するグループに順番に番号が付けられます。

たとえば、 `+ www.domain 1.com `を含むすべてのページを一時的に ` www.domain 2.com +`にリダイレクトする場合、次を使用できます。

RedirectMatchを使用した一時的なリダイレクト

<VirtualHost *:80>
   ServerName www.domain1.com
   RedirectMatch ^/(.*)$ http://www.domain2.com/$1
</VirtualHost>

<VirtualHost *:80>
   ServerName www.domain2.com
   . . .
</VirtualHost>

デフォルトでは、 `+ Redirect `と ` RedirectMatch `ディレクティブの両方が一時的なリダイレクトを確立します。 永続的なリダイレクトを作成したい場合は、いずれかのディレクティブに ` permanent +`を追加することで作成できます。

永続的なリダイレクト

Redirect  / http://www.domain2.com
RedirectMatch  ^/(.*)$ http://www.domain2.com/$1

`+ mod_rewrite `モジュールを使用して、より柔軟で強力なリダイレクトを作成することもできます。 これはこの記事の範囲外ですが、https://www.digitalocean.com/community/tutorials/how-to-set-up-mod_rewrite-for-apache-onで ` mod_rewrite +`を開始できます-ubuntu-14-04 [Apacheのmod_rewriteの設定方法]。

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

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

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

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

次のように、Apacheで既に設定されている「+ domain1.com +」という単一のドメインから提供されるようにWebサイトが設定されていると仮定します。

/etc/apache2/sites-available/domain1.com.conf

<VirtualHost *:80>
   ServerAdmin [email protected]
   ServerName domain1.com
   ServerAlias www.domain1.com
   DocumentRoot /var/www/domain1.com/public_html
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

また、「+ domain2.com +」で将来のバージョンのウェブサイトを既に提供していると仮定します。

/etc/apache2/sites-available/domain2.com.conf

<VirtualHost *:80>
   ServerAdmin [email protected]
   ServerName domain2.com
   ServerAlias www.domain2.com
   DocumentRoot /var/www/domain2.com/public_html
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

`+ domain 1.com `仮想ホスト設定ファイルを変更して、永続的なリダイレクトを ` domain 2.com +`に追加しましょう。

/etc/apache2/sites-available/domain1.com.conf

<VirtualHost *:80>
   ServerAdmin [email protected]
   ServerName domain1.com
   ServerAlias www.domain1.com
   DocumentRoot /var/www/domain1.com/public_html
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

`+ RedirectMatch `ディレクティブを使用して、前述のリダイレクトを追加しました。 ホームページだけでなく、すべてのWebサイトページが影響を受けることを確認するために、単純な ` Redirect `の代わりに ` RedirectMatch `を使用します。 ` ^ /(。*)$ `正規表現は、URL内の ` / `の後のすべてに一致します。 たとえば、 ` http:// domain1.com / `は ` http:// domain2.com / `にリダイレクトされます。 永続的なリダイレクトを実現するには、 ` RedirectMatch `ディレクティブの後に ` permanent +`を追加するだけです。

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

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

ウェブサイトに、それぞれ「+ products.html」と「+ services.html」と呼ばれる製品とサービス用の2つの個別のページがあるとします。 ここで、これらの2つのページを、代わりに + offers.html +`という単一のオファーページに置き換えることにしました。 `+ products.html`と + services.html`から `+ offers.html`への単純なリダイレクトを設定します。

次のようにWebサイトが構成されていると仮定します。

想定される元の仮想ホスト構成

<VirtualHost *:80>
   ServerName example.com
   . . .
</VirtualHost>

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

元の構成に追加されたリダイレクト

<VirtualHost *:80>
   ServerName example.com



   . . .
</VirtualHost>

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

結論

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

安全なSSL接続の強制(i。 「+ http」ではなく「+ https」を使用して)、すべての訪問者がWebサイトの「+ www。+」プレフィックスアドレスのみで終了するようにします。

リダイレクトを正しく使用すると、現在のWebプレゼンスを活用しながら、必要に応じてサイト構造を変更できます。 訪問者をリダイレクトする方法について詳しく知りたい場合、Apacheはhttps://httpd.apache.org/docs/current/mod/mod_alias.html[mod_alias]とhttpに主題に関する優れたドキュメントがあります。公式ドキュメントの//httpd.apache.org/docs/current/mod/mod_rewrite.html[mod_rewrite]セクション。