404エラーページをカスタマイズして,移転元URLから新URLへの誘導を行う 中継ページ方式によるURL転送作業このカモランドは,フレッツADSLでインターネットに常時接続した自宅PC上で, Webサーバ(Apache)を動かすことで実現しています. で,この自宅PCに,「http://kamoland.no-ip.com」といったURLでアクセスできるようにするためには, DNS(Domain Name Service)サーバと呼ばれるマシンに,URLとIPアドレスの対応関係を登録しておく必要があります. 私はこれまで,DynDNSというサービスが提供しているDNSサーバを使っていて,
というURLでここにアクセスできるようにしていました. しかし都合により今後は,
というURLを,No-IP.comというサービスが提供しているDNSサーバに登録することにしました. *1 そのため,これまで
というURLでアクセスしてくれていた人々を,
というURLに誘導するということが必要になってしまいました. まぁ,よくありそうな話ですわ. 今回,何とかスムーズに誘導できないかなあ,と色々Apacheの設定を工夫して試してみたので, その顛末を書いてみます.
方針
こんな感じです.トップページがアクセスされたときは別に問題ないのですが, 配下のhtmlファイルを直接アクセスされたときが,少々くせ者です. ファイル数が膨大なので,いちいちページごとに対応する新しいURLを書いたページを用意してられないので, 404エラーを捕捉することによって,一括で新トップページのURLを表示することにします.
旧URL用トップページの作成まず,古いURLでトップページにアクセスしてきた人に見せる,「移転しました」ページを作っときます.index.html <HTML><HEAD><TITLE></TITLE> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Shift_JIS"> </HEAD> <BODY> <CENTER> <H2>カモランドは移転しました</H2> <P> <H3> <A HREF="http://kamoland.no-ip.com">http://kamoland.no-ip.com</A> </H3> ダイナミックDNSサービスの変更に伴い,URLが変わりました. <P> お手数おかけします... </CENTER> </BODY></HTML>
404 Not Foundエラーページの作成次に,トップページ以外にアクセスしてきたときに表示する,エラーページです.missing.html <HTML> <HEAD> <TITLE>404 Not Found</TITLE> <META http-equiv=Content-Type content="text/html; charset=Shift_jis"> </HEAD><BODY> <H1>Not Found</H1> 要求されたページは,見つからないっす <P> トップページ <A HREF="http://kamoland.no-ip.com">http://kamoland.no-ip.com</A> からリンクをたどってみて下さいませ <P> よろしくおねがいします <HR> </BODY></HTML> 言わないで〜,さよならは〜♪
VirtualHostの設定さて,ここまでをふまえて,Apacheにどのような動きをさせれば良いのか,まとめてみます.
という風に,アクセスしたURL(厳密には,HTTP RequestのHost:ヘッダの内容)によって, 表示するURLを切り替えればOKです. (もちろん,homeip, no-ip 両方のURLが自宅PCのIPアドレスに対応するように, DNSに登録してあることが前提です) これはApacheでは,ネームベースのVirtualHost機能で実現できます. httpd.confより抜粋 # 404エラー時の表示ページ ErrorDocument 404 /missing.html # ネームベースのVirtualHost NameVirtualHost kamoland.no-ip.com # 旧URLでのアクセス時は,移転案内 <VirtualHost kamoland.no-ip.com> ServerName kamoland.homeip.net DocumentRoot /moved ErrorLog logs/moved-error_log CustomLog logs/moved-access_log combined </VirtualHost> # 新URLでのアクセス時は,本来のカモランド <VirtualHost kamoland.no-ip.com> ServerName kamoland.no-ip.com DocumentRoot /html ErrorLog logs/error_log CustomLog logs/access_log combined </VirtualHost> 例えば,httpd.confにこのように記述しておいて,
を配置すれば,目的を達成できます. しかし,わざわざクリックするのが面倒だなぁということで, URLリライト方式によるURL転送作業 を試してみます. |