301リダイレクトでWebサイトの移転
概要†
Webサイトの引っ越しにより、今まで
http://xxx.xxx.com/path/to/file.html
として閲覧されていたファイルを
http://yyy.yyy.com/path/to/file.html
に移した後に、
古い xxx.xxx.com を読みに来るアクセスを 新しいアドレスである yyy.yyy.com へ誘導するための手順です。
状況†
重川研究室のホームページは昔
http://dora.ims.tsukuba.ac.jp/
以下にあったのですが、専攻を移籍したことにより、
http://dora.bk.tsukuba.ac.jp/
が正式なアドレスとなっていました。
でも古いアドレスでもアクセスできるようにと、DNS の設定は残してもらったため、 dora.ims.... でも、dora.bk... でも同じサイトに繋がり、 同じ内容のページが閲覧できる状況になっていました。
問題点†
どちらでもアクセスできればそれでいいじゃん
と思っていたのですが、ここで問題点が浮上します
サイト上に新しいページを作ると、なぜか Google が dora.ims.tsukuba.ac.jp の方を正式アドレスとして判断してしまい、 検索結果からのアクセスが古いアドレスばかりに誘導されてしまうことが しばしばありました。
これではいつまでたっても古いアドレスへのアクセスがなくなりません。
古いアドレスへのアクセスを新しいアドレスへリダイレクトする†
Apache では NameVirtualHost という機能を使って、 異なるサーバー名で参照してくるアクセスに対して、 異なるコンテンツを返す機能を持っています。
また、mod_rewrite というモジュールを使うと、 アクセスされたパスの一部を書き換えて、 任意の url へとリダイレクトすることができます。
これらを使って
http://dora.ims.tsukuba.ac.jp/path/to/file.html
へのアクセスを、
http://dora.bk.tsukuba.ac.jp/path/to/file.html
へとリダイレクトすることにしました。
apache の設定†
以下では mod_rewrite が有効化されていることが前提となっています。
/etc/apache2/sites-enabled/000-default.conf
NameVirtualHost *:80 <VirtualHost *:80> ServerName dora.bk.tsukuba.ac.jp # dora.bk.tsukuba.ac.jp へアクセスされた際の動作を設定する # 一番上の VirtualHost 設定は、他のすべての VirtualHost 設定とマッチしない # 場合のデフォルト設定にもなる ... </VirtualHost> <VirtualHost *:80> ServerName dora.ims.tsukuba.ac.jp # dora.ims.tsukuba.ac.jp へアクセスされた際の動作を設定する # 問答無用で dora.bk.tsukuba.ac.jp 以下へリダイレクトする # コード 301 は Permanently Moved で「今後は常にそちらを見て」という意味 RewriteEngine on RewriteRule ^(.*) http://dora.bk.tsukuba.ac.jp$1 [R=301,L] </VirtualHost>
これでうまく行った。
ブラウザのキャッシュに注意†
上記のような設定は、一度ミスをして、おかしな内容をブラウザに読ませると ブラウザのキャッシュにその設定が残ってしまい、その後いくらサーバーの設定をいじっても ブラウザが新しい内容を読みに行ってくれなくて困ってしまいます。
最新の Firefox や Chrome では、プライバシー設定の「ブラウズ履歴の消去」 のようなメニューから、「最新1時間のキャッシュ等の消去」ができるので、 おかしな設定がキャッシュに入ってしまった場合にはキャッシュを消去してから 再チャレンジするとぬかるみにはまらずにすみます。