2007/08/23

[技術系]   ErrorDocumentを絶対URLで書くのはやめようよ

at 13:08JST
 
紹介されているエラーページのデザインはおもしろい。でも、設定のしかたがよくないと思う。このやりかたは多くのサイトで採用されているようだけれど、はっきりいって迷惑。

404エラーをデザインする為のインスピレーション*ホームページを作る人のネタ帳
http://e0166.blog89.fc2.com/blog-entry-262.html
ErrorDocument 403 http://e0166.com/403error.html
ErrorDocument 404 http://e0166.com/404error.html
ErrorDocument 500 http://e0166.com/500error.html
赤い字で書かれた部分はもちろん皆様のドメイン名に変更してください


これじゃ
「リダイレクトされちゃうからダメ」
だよ。

こういうふうに設定されていた場合、たとえば、
 http://e0166.com/no_such_a_document.html
という、存在しないドキュメントにアクセスすると、

  1. ブラウザはhttp://e0166.com/404error.htmlを表示する
  2. ブラウザのアドレス欄はhttp://e0166.com/404error.htmlに変わる

というふうになる。1はいいのだが、2が迷惑。

「アドレスを打ち間違えた」ためにこのエラーが発生した場合のことを想定してみてほしい。こうした場合、ふつうブラウザの「戻る」で戻ってアドレスを打ち直そうとするのが人情だが、

  • 戻ると、またリダイレクトでエラーページにジャンプさせられる
  • 「じゃあ戻らないで打ち直そう」と思っても、アドレスがエラードキュメントのアドレスになってしまっているので打ち直しづらい

といった感じで、実は不親切このうえない。

おまけに
「HTTPのステータスコードが、404 Not Foundではなく302 Foundになってしまう」
ので、ほかにもいろいろ不都合の発生することが考えられる。つまり、サイト運営者の自己満足に終わり、害さえ及ぼす可能性があるわけだ。

こういうことになるのは、ErrorDocumentに対して
「ホスト名まで含む“絶対URL”を指定している」
からだ。そもそも他ホストにジャンプさせたいならともかく、同じホスト上のドキュメントを参照するのに絶対URLを指定する理由などない。

先に挙げたようなめんどうを起こしたくないなら、

  1. 設定時に、
    ErrorDocument 404 /404error.html
    というように、ホスト名を除いたドキュメントのパスを指定する
  2. 404error.html 内のリンク・画像指定のパスはすべて絶対パスで書く

ようにする。こうすると404エラーが起きたときもブラウザのアドレス欄は「間違ったアドレスのまま」保持され、なおかつブラウザには404error.htmlの内容が表示される。

2.は、ブラウザが「間違ったアドレス」のパスからHTMLを解析して表示しようとするから。相対パスで画像を参照したりしているとのきなみ表示されないので注意。

つーことなので気をつけましょう。

Apacheでの話でした。ぼくは1.3系列だけど2系列でも同じはず。どっちにしてもここらへんはマニュアルにぜんぶ書いてある。なにか設定する際は信用ならないblogのエントリ(=このめも含む)など鵜呑みにせず
「自分でマニュアルをよく読もう!」
ということで。

参考:
http://httpd.apache.org/docs/2.2/ja/mod/core.html#errordocument
関連しそうな過去記事:
さらに過去の記事
2009/04 (1)   2008/12 (3)   2008/11 (9)   2008/10 (10)   2008/09 (20)   2008/08 (2)   2008/07 (23)   2008/06 (16)   2008/05 (22)   2008/04 (11)   2008/03 (21)   2008/02 (20)   2008/01 (21)   2007/12 (32)   2007/11 (37)   2007/10 (46)   2007/09 (63)   2007/08 (33)   2007/07 (41)   2007/06 (81)   2007/05 (173)   2007/04 (168)   2007/03 (113)   2007/02 (123)   2007/01 (92)   2006/12 (111)   2006/11 (185)   2006/10 (20)  
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。