Server/Apache/メンテナンス中のアナウンスページLast-modified: 2012-06-28 (木) 20:26:01
目的 †友人のサーバが物理的にお引越しのためアナウンスページも準備できないので、うちのサーバでアナウンスページをプチホスティングしようという試みのメモ。 要件 †ユーザやクローラのことも考えて以下の要件を満たす形で設定する。
設定 †想定するディレクトリ構成、503.htmlにおける注意事項、httpd.confの記述、.htaccessの記述の順で進めていきます。 ディレクトリ構成 †ディレクトリ構成は、先頭の/をファイルシステムのルート、続く/docrootをドキュメントルートとして記述していきます。 / └── docroot/ ├── error/ │ ├── 503.html │ └── .htaccess ├── otherdocs/ └── other.html 503.html †503.htmlから参照するファイルは全て/errorディレクトリ以下に配置します。 エラーページ内では、相対パスに寄るファイル読み込みを行ってはならないので、画像やcss、JavaScriptファイル等、全てのリソースを絶対パスで参照する必要があります。また、cssでの画像参照等、読み込んだファイルでの参照も絶対パスで記述します。 これは、レスポンスコード503を発行した階層でエラーページが読み込まれるため、階層毎に相対パスが書き換わってしまうためです。 httpd.conf †基本的な設定は省略し、ここでの目的に必要な箇所だけを記述します。 エラーページの指定 †エラーコードに対応するページを、ドキュメントルートからのパスで指定します。 ErrorDocument 503 /error/503.html RerwiteRule †ステータスコード503を返し、アナウンスページを使用するためmod_rewriteを使用します。 その後、レスポンスコードに合わせたエラーページの読み込みで、指定したエラーコード用のファイルがクライアントに転送されます。 RewriteEngine on RewriteCond %{REQUEST_URI} !^/error/.*$ RewriteRule ^/.*$ - [R=503, L] .htaccessによる応答ヘッダの書き換え †.htaccessでHeaderディレクティブを使用できる様にDirectoryセクションを追加する。 また、ドキュメントルートでFileInfoのオーバーライドが許可されている場合は、以下の記述をする必要はありません。 <Directory /docroot/error> AllowOverride FileInfo </Directory> .htaccess †HTTPの応答ヘッダ内、Retry-Afterフィールドを書き換えます。 Retry-Afterフィールドは、リトライまで空けて欲しい時間を秒数で指定するか、絶対時をGMTで指定します。 時刻のフォーマットは、RFC2616 Header set Retry-After "Fri, 31 Dec 2012 23:59:59 GMT" 確認 †最後に確認して設定を完了しましょう。確認方法の一例を挙げておきます。 アナウンスページ †実際にWEBページにアクセスし、URLが書き換わらずにアナウンスページが表示されれば完了です。念のため、ディレクトリ階層が違うURLを参照してそちらも確認してみてください。 レスポンスコードとRetry-After †こちらはHTTPヘッダを見る必要があります。Firefoxであれば、「メニュー>ツール>Web開発>Webコンソール」から確認できます。 Webコンソールに表示された503レスポンスを選択すると、ヘッダ内のフィールドを確認することが出来ます。 以上、お疲れ様でした。 |