2月上旬に独自ドメインを取得し、これを機会にURLの変更とサイトの分割を行ったわけだが、このために利用したのが「301リダイレクト」である。

301リダイレクトを行うと、旧URLへのアクセスを新URLへ自動的に転送し、ブラウザや検索エンジンにはこの転送が「恒久的な移転のためである」と知らせてくれる。GoogleやYahoo!も推奨している方法であり、ページランクも引き継がれるとされている。

301リダイレクトを行う方法は複数あり、このサイトでは3つの方法を組み合わせてる。メインとなるのは、旧URL「nekhet.ddo.jp」から新URL「reichsarchiv.jp」への転送である。これは、ドキュメントルートに設置した.htaccessで行う。

当初は、多くのWebページで紹介されている、mod_Rewriteを使わない方法である

Redirect 301 / http://reichsarchiv.jp/

を試してみたが、無限ループになってしまいうまくいかなかった。そこで、mod_Rewriteを使う方法に切り替えた。

まずは、ドメインをそっくり移転させる設定。以下は、すべて.htaccessに記述する方法である。

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(nekhet\.ddo\.jp)(:80)?
RewriteRule ^(.*) http://reichsarchiv.jp/$1 [R=301,L]

これで、nekhet.ddo.jpへのアクセスは自動的にreichsarchiv.jpに転送された。サイト構造が変わっていなければ、これだけでOKだ。例えば、いちいち転送先を指定しなくても、

nekhet.ddo.jp/people/→reichsarchiv.jp/people/
nekhet.ddo.jp/etcdata/namespell.html→reichsarchiv.jp/etcdata/namespell.html

に自動的に変換される。

ついでに、URLの正規化を行った。つまり、www.reichsarchiv.jpというアクセスも「www」なしのreichsarchiv.jpに強制的に統一するのだ。これを実現するには、

RewriteCond %{HTTP_HOST} ^www\.reichsarchiv\.jp
RewriteRule ^(.*) http://reichsarchiv.jp/$1 [R=301,L]

と記述する。まとめると、

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(nekhet\.ddo\.jp)(:80)?
RewriteRule ^(.*) http://reichsarchiv.jp/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.reichsarchiv\.jp
RewriteRule ^(.*) http://reichsarchiv.jp/$1 [R=301,L]

となる。

Gentoo Linuxで自宅サーバは、いささか面倒だった。従来、nekhet.ddo.jp/blog/4以下で運用していたページをgentoo.reichsarchiv.jpとして独立させたのだが、サイト構造が同一ではないのでシンプルな書き方ができない。幸いページ数も少ないので、ページ単位で個別にリダイレクトした。

redirect 301 /blog/4 http://gentoo.reichsarchiv.jp
redirect 301 /item/736 http://gentoo.reichsarchiv.jp/item/1
redirect 301 /item/737 http://gentoo.reichsarchiv.jp/item/2
(中略)
redirect 301 /item/955 http://gentoo.reichsarchiv.jp/item/70
redirect 301 /item/962 http://gentoo.reichsarchiv.jp/item/71

ページ単位の指定は、ドメイン単位の設定の前に記述する必要がある。ドメイン単位の指定を先にすると、上記の2行目の処理は

nekhet.ddo.jp/item/736
 ↓
reichsarchiv.jp/item/736
 ↓
gentoo.reichsarchiv.jp/item/1

と、2回リダイレクトが発生してしまう。ページ単位の指定を先にすれば、

nekhet.ddo.jp/item/736
 ↓
gentoo.reichsarchiv.jp/item/1

の1回だけで済む。