ぽち*ぷ〜ちのページは今のところ XHTML1.1 と CSS2.1 で書かれています。ところが、XHTML1.1 で書かれたページを IE8 からそのままの形で閲覧しようとすると、表示するのではなくてダウンロードしようとしてしまいます。
これは Internet Explorer が Webコンテンツとしてアクセスできる XHTML文書の MIMEタイプは、"text/html" でなければならいといった致命的な実装が原因となっているようです。つまり、仕様に準拠した MIMEタイプを設定すると Internet Explorer では、最新版の Windows版Internet Explorer 7 も含めて、XHTML文書を観覧することができません。
「直接 HTTPヘッダに文書の MIMEタイプを設定する - XHTML1.1 - 解説 - XHTML - W3G」より
IE9 でやっと MIMEタイプに application/xhtml+xml を受け入れるようになりましたけども、いまだ大多数の方々が使っていると思われる IE8 やそれより前のバージョンでは Web標準を無視する仕様になっているのも困ったものです。こんな現状ですので、広く多くの方々に見ていただきたいと Webサイトを公開している以上、そうした Webブラウザを利用している方々を切り捨てるわけにはいきません。
このページでは apache2 で mod_rewrite を使って、application/xhtml+xml を受け入れない Webブラウザに送り出す HTTPヘッダの Content-Type を、XHTML1.1準拠の application/xhtml+xml から、そうした Webブラウザが受け入れ可能な text/html に書き換える方法をメモしておきます。これにより Webサーバ上にはしっかり XHTML1.1 に準拠した文書を置いたままで、ちゃんとした Webブラウザが見に来た時はそのまま送り出し、application/xhtml+xml を受け入れない Webブラウザが見に来た時だけそれ専用の不正な Content-Typeヘッダを持つ XHTML1.1 を送り出すようになります。
「application/xhtml+xml と mod_rewrite - futuremix」を参考にして apache2 の個別設定用ディレクトリ、 /etc/apache2/conf.d/ の中に、xhtml というファイル名で設定を書いて置いてみました。
/etc/apache2/conf.d/xhtml
AddType "application/xhtml+xml; charset=utf-8" html
<Directory /path/to/document/>
RewriteEngine On
RewriteCond %{HTTP_ACCEPT} !application/xhtml\+xml
RewriteRule ^$ index.html
RewriteCond %{HTTP_ACCEPT} !application/xhtml\+xml
RewriteCond %{LA-F:REQUEST_FILENAME} \.html
RewriteRule .* - "[T=text/html; charset=utf-8]"
</Directory>
この設定ファイルが各行で何をしているのかを大雑把に解説してみます。
動作確認環境 : Debian GNU/Linux 6.0 squeeze