Apacheを使用して一時的および永続的なリダイレクトを作成する方法
序章
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.com
に www.domain2.com
. ただし、このソリューションは、サイト全体ではなく、単一のホームページでのみ機能します。
複数のページをリダイレクトするには、 RedirectMatch
正規表現を使用して、単一のファイルだけでなくディレクトリ全体を指定するディレクティブ。 RedirectMatch
括弧内の正規表現パターンに一致し、次にを使用してリダイレクト先の一致したテキストを参照します $1
式、ここで 1
一致したテキストの最初のグループです。 より複雑な例では、後続の一致するグループに順番に番号が付けられます。
たとえば、内のすべてのページを一時的にリダイレクトしたい場合 www.domain1.com
に www.domain2.com
、次を使用できます。
<VirtualHost *:80>
ServerName www.domain1.com
RedirectMatch ^/(.*)$ http://www.domain2.com/$1
</VirtualHost>
<VirtualHost *:80>
ServerName www.domain2.com
. . .
</VirtualHost>
デフォルトでは、両方 Redirect
と RedirectMatch
ディレクティブは一時的なリダイレクトを確立します。 永続的なリダイレクトを作成したい場合は、追加することで作成できます 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で次のように構成されています。
<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
:
<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
:
<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.html
と services.html
それぞれ。 ここで、これら2つのページを1つのオファーページに置き換えることにしました。 offers.html
代わりは。 の単純なリダイレクトを構成します products.html
と services.html
に offers.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セクションにこのテーマに関する優れたドキュメントがあります。