まずローカルの hosts ファイルを編集して,「arak.jp」で新サーバのアドレスを引くように設定した環境で作業。
旧サーバには「www.arak.jp」でアクセスできる状態。
データファイルは tar で固めて転送。
VikiWiki 本体は UTF-8 をやめて EUC-JP 版でインストールし直す。
OS が変わったのでバイナリの Perl モジュールや namazu などは再ビルド。
「arak.jp」にアクセスしてひと通り確認する。
レスポンスが速っ!!
SAKURA のサービスだと「www.arak.jp」でも「arak.jp」でもアクセスでき,同じページが表示されてしまう (旧サーバは「arak.jp」でアクセスすると「www.arak.jp」にリダイレクトされてた)。
同じページが複数のアドレスを持つというのは,検索エンジンなどへの影響を考えると好ましくないため,「arak.jp」だけに統一することにした。
しかし SAKURA は mod_rewrite が禁止されてて,.htaccess に RewriteRule を書くことができない。
そこで,「arak.jp」以外のアクセスを拒否するように .htaccess に記述。
SetEnvIfNoCase Host "^arak\.jp(:80)?$" host_ok
order deny,allow
deny from all
allow from env=host_ok
これだけだと不親切なので,「www.arak.jp」でアクセスしてきた人を「arak.jp」へ誘導する。
上のアクセス制御で引っかかると
403 Forbidden
が返るから,その内容をカスタマイズ。
ErrorDocument 403 /403.cgi
あとは適当に 403.cgi を作る。
#!/bin/sh
if [ "${HTTP_HOST}" = "arak.jp" ]; then
cat <<- EOF
Status: 403 Forbidden
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>403 Forbidden</TITLE>
</HEAD><BODY>
<H1>Forbidden</H1>
<P>You don't have permission to access this document on this server.</P>
<HR>
<ADDRESS>${SERVER_SOFTWARE} Server at ${SERVER_NAME}</ADDRESS>
</BODY></HTML>
EOF
elif [ "${HTTP_HOST}" = "www.arak.jp" ]; then
URI="http://arak.jp${REQUEST_URI}"
cat <<- EOF
Status: 301 Moved Permanently
Location: ${URI}
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>301 Moved Permanently</TITLE>
</HEAD><BODY>
<H1>Moved Permanently</H1>
<P>The document has moved <A HREF="${URI}">${URI}</A>.</P>
<HR>
<ADDRESS>${SERVER_SOFTWARE} Server at ${SERVER_NAME}</ADDRESS>
</BODY></HTML>
EOF
else
cat <<- EOF
Status: 410 Gone
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>410 Gone</TITLE>
</HEAD><BODY>
<H1>Gone</H1>
<P>The requested resource is no longer available on this server
and there is no forwarding address.
Please remove all references to this resource.</P>
<HR>
<ADDRESS>${SERVER_SOFTWARE} Server at ${SERVER_NAME}</ADDRESS>
</BODY></HTML>
EOF
fi
最初の if ブロックでは,arak.jp あてで 403 の人に本来の 403 ページを見せる。
次の elif ブロックで,www.arak.jp あての人を arak.jp にリダイレクト。
301 Moved Permanently
を返す。
最後の else ブロックは,SAKURA 標準で提供されるホスト名でアクセスしてきた人に対して
410 Gone
を返し,追い払うためのもの。
全部終わったらローカルの hosts ファイルを元に戻し,arak.jp の DNS の設定を変更。
全世界に浸透するのを待つ。