序章

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

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

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

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

Redirect /oldlocation http://www.newdomain.com/newlocation

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

Redirect permanent /oldlocation http://www.newdomain.com/newlocation

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

前提条件

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

  • Apache 2がインストールされ、仮想ホストでWebサイトにサービスを提供するように設定された1台のサーバー。 Ubuntu 16.04 、CentOS 7 、またはDebian7でApache仮想ホストを設定する方法に従ってください。

ソリューションの概要

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

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

リダイレクトによる一時的なリダイレクト
<VirtualHost *:80>
	ServerName www.domain1.com
	Redirect / http://www.domain2.com
</VirtualHost>

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

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

複数のページをリダイレクトするには、 RedirectMatch 正規表現を使用して、単一のファイルだけでなくディレクトリ全体を指定するディレクティブ。 RedirectMatch 括弧内の正規表現パターンに一致し、次にを使用してリダイレクト先の一致したテキストを参照します $1 式、ここで 1 一致したテキストの最初のグループです。 より複雑な例では、後続の一致するグループに順番に番号が付けられます。

たとえば、内のすべてのページを一時的にリダイレクトしたい場合 www.domain1.comwww.domain2.com、次を使用できます。

RedirectMatchを使用した一時的なリダイレクト
<VirtualHost *:80>
	ServerName www.domain1.com
	RedirectMatch ^/(.*)$ http://www.domain2.com/$1
</VirtualHost>

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

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

永続的なリダイレクト
Redirect permanent / http://www.domain2.com
RedirectMatch permanent ^/(.*)$ http://www.domain2.com/$1

を使用して、より柔軟で強力なリダイレクトを作成することもできます。 mod_rewrite モジュール。 これはこの記事の範囲外ですが、始めることができます mod_rewrite Apacheのmod_rewriteを設定する方法。

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

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

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

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

あなたのウェブサイトがと呼ばれる単一のドメインから提供されるように構成されていると仮定しましょう domain1.com すでにApacheで次のように構成されています。

/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>

また、次のWebサイトの将来のバージョンをすでに提供していることを前提としています。 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>

変更しましょう domain1.com 永続的なリダイレクトを追加する仮想ホスト構成ファイル domain2.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
    RedirectMatch permanent ^/(.*)$ http://domain2.com/$1
</VirtualHost>

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

注:を使用して構成を変更した後は、Apacheを再起動することを忘れないでください。 systemctl restart apache2.

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

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

あなたのウェブサイトがと呼ばれる製品とサービスのための2つの別々のページを持っていたと想像してみましょう products.htmlservices.html それぞれ。 ここで、これら2つのページを1つのオファーページに置き換えることにしました。 offers.html 代わりは。 の単純なリダイレクトを構成します products.htmlservices.htmloffers.html.

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

元の仮想ホスト構成を想定
<VirtualHost *:80>
	ServerName example.com
	. . .
</VirtualHost>

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

元の構成に追加されたリダイレクト
<VirtualHost *:80>
	ServerName example.com
    
    Redirect permanent /products.html /offer.html
    Redirect permanent /services.html /offer.html
	. . .
</VirtualHost>

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

結論

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

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

リダイレクトを正しく使用すると、現在のWebプレゼンスを活用しながら、必要に応じてサイト構造を変更できます。 訪問者をリダイレクトする方法について詳しく知りたい場合は、Apacheの公式ドキュメントのmod_aliasおよびmod_rewriteセクションにこのテーマに関する優れたドキュメントがあります。