application/xhtml+xml を mod_rewrite で text/html に書き換える

ぽち*ぷ〜ちのページは今のところ XHTML1.1CSS2.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ブラウザを利用している方々を切り捨てるわけにはいきません。

このページでは apache2mod_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>

この設定ファイルが各行で何をしているのかを大雑把に解説してみます。

  1. AddTypeディレクティブで htmlファイルに Content-Typeヘッダの MIMEタイプと文字コードを追加
  2. サブディレクトリを含めた /path/to/document/ 以下に下記の設定を適用する
  3. RewriteEngine を動かし
  4. Webブラウザが送って来た Acceptヘッダに application/xhtml+xml が存在しない場合で
  5. パス末尾にファイル名が省略されていた場合は index.html へリダイレクト
  6. Webブラウザが送って来た Acceptヘッダに application/xhtml+xml が存在しない場合で
  7. Webブラウザが要求したファイルが htmlファイルだった場合に
  8. Webサーバが送り出す htmlファイルの Content-Typeヘッダの MIMEタイプを text/html に書き換える

動作確認環境 : Debian GNU/Linux 6.0 squeeze

戻る


Last updated : 2011/06/25
Author : 犬山ぽち丸 / INUYAMA Pochimaru / Pochimaru Inuyama
E-mail : pochi@hoshinoumi.net
Key ID : 4A1B5E85
Key fingerprint : 4605 4D40 6154 20C1 5592 3E54 5A37 FEE9 4A1B 5E85

正当な XHTML 1.1 です 正当な CSS です