2003 年 10 月の履歴(もしくは日誌)


2003 年 10 月

10 月 31 日 案内

XHTML への移行と MIME タイプ

今まで,あまり考えてこなかったのですが,HTML 4.01 と XHTML 1.0,そして XHTML 1.1 なども使っています.HTML 4 と XHTML 1.0 は Web サーバが返すメディアタイプ属性が text/html で良い事になっていますが,XHTML 1.1 以降は text/html はだめよということになっていて,application/xhtml+xml 使いましょうということになっているようです.

HTML 4 から XHTML 1.0 への移行を検討したとき,そして実際に XHTML 1.0 を使い始めたときには,かなり注意深かったのです.でも XHTML 1.1 を使い始めたときは勢いでした.十分な検討をしませんでした.だから XHTML 1.1 でも実は text/html のままなのでした.これはやっぱり修正するべきですね.

問題は一つにディレクトリに,HTML 4 と XHTML 1.0 と XHTML 1.1 のファイルが混在していて,そのすべての拡張子が .html だってことなんです.

Web サーバでは,拡張子とディアタイプ属性を関連づけて,拡張子ことに,このフィイルのディアタイプ属性はあれこれですよっていう情報を HTTP ヘッダに付加しているんです.普段は Web ブラウザを使っていても見えないところですね.そう,XHTML 1.1 を使い始めるときに,異なる拡張子を使えば簡単だったのですが.

ざっと数えてみたら HTML 4 となっているファイルは約 200 ありました.これを XHTML に書き換えるのはできればやりたくありません.

HTML 4 以外が約 400 です.XHTML 1.1 を XHTML 1.0 に変換するのは比較的簡単そうですが,やはりあまりやりたくないですね.

なんとか HTML 4 の時には text/html で XHTML の時には application/xhtml+xml としたいところです.しかも,拡張子を単純に変更すると,リンクしなおさなくちゃならないですし,サイト内リンクは修正できますが,外部からのリンクにまで対応するのはちょっと無理です.

Cycling.jp の Web サーバは Apache を使っていますが,.htaccess という設定ファイルでこれを解決できないか考えてみました.

Options MultiViews
AddType "application/xhtml+xml; charset=iso-2022-jp" html
AddType "text/html; charset=iso-2022-jp" html4

Options MultiViews は,あるファイルが見つからなかった場合に,そのファイル名にさらに何らかの拡張子を付加したものがないか検索して,あればそれを返すっていうオプションです.これは拡張子が複数ある場合も機能します.

そして html という拡張子は application/xhtml+xml に,html4 という拡張子は text/html に割り付けます.

こうしておくと,newfile.html は application/xhtml+xml に oldfile.html.html4 はtext/html になります.拡張子は複数つけることが可能なのです.さらに http://onohiroki.cycling.jp/Bike.html にアクセスしたときに,Bike.html が存在しなくて Bike.html.html4 が存在する場合は,Bike.html.html4 が表示されます.

これなら HTML 文書間のリンクの関係も崩れないし,正しい MIME タイプが実現できるます.Web サイトへの訪問者は,おそらくファイル名の変更にも気がつきません.

SSI という機能を XBitHack という設定を使って実現している場合,AddType "application/xhtml+xml; charset=iso-2022-jp" html と設定すると,拡張し .html のファイルに対して SSI が効きません.

SSI の設定も書き加えると以下のようになります.

XBitHack full
Options MultiViews Includes
AddType "application/xhtml+xml; charset=iso-2022-jp" html
AddType "text/html; charset=iso-2022-jp" html4
AddHandler server-parsed html html4

XBitHack を使わなくても,AddHandler server-parsed を設定すれば,SSI は効くのですが,XBitHack も併用すれば,ファイルの更新情報が HTTP ヘッダに残ります.

この方法で,実際に問題になるのは XHTML ファイルが整形式 XML になっていないと,Web ブラウザで見た場合にも XML パーサエラーになることです.これまで HTML は,ちょっとくらい文法を無視していても,Web ブラウザが適当に表示してくれていたのですが,XHTML 1.1 移行はそうは行かなくなるぞって事ですね.

来月くらいから,この設定を行います.これで XHTML への移行が完了って感じですね.もちろん古いファイルは HTML 4 のままですけどね.ここでいう XHTML への移行は,HTML 4 の書き直しと言う意味ではないと言う事.

TrackBack

そうそう,かいぞーさん,間違いのご指摘ありがとうございました.























[ 上に戻る]