SSIとapplication/xhtml+xml

先の「metaタグのapplication/xhtml+xml(2)」で、ApacheではどうもSSIはtext/htmlであるファイルにしか効かない模様、などと書いてましたが、後で色々と試してみたところ、この文は間違いであると分かりました。申し訳ありません。以下、application/xhtml+xmlであるファイルでSSIを行う方法について述べます。

まず、SSIを行うにはAddHandler server-parsed命令による方法がありますが、この場合は.htaccessファイルに次のように設定すれば、application/xhtml+xmlであるファイルでも問題なくSSIが使用できます。

AddHandler server-parsed xhtml
AddType "application/xhtml+xml; charset=Shift_JIS" xhtml

SSIを行うには、他にXBitHack命令による方法もありますが、この場合、単にXBitHackを置くだけだと、これはtext/htmlであるファイルにしか働きません。例えば次のような場合:

XBitHack full
AddType "text/html; charset=Shift_JIS" html
AddType "application/xhtml+xml; charset=Shift_JIS" xhtml

自分は普段XBitHackの方を使用していたので、この設定でapplication/xhtml+xmlのファイルにSSIが効かないことをもって、SSIはtext/htmlであるファイルにしか効かないと勘違いしていたのでした。

さて、AddHandler server-parsedによる方法なら、application/xhtml+htmlであるファイルでもSSIが使えるわけですが、これだとXBitHack fullでできた、Last-Modifiedヘッダを出すSSIにはなりません。が、試しに次のようにAddHandler server-parsedXBitHack fullを両方書いてみると、属性754のファイルで、Last-Modifiedヘッダを出力するSSIを実現することができました。

XBitHack full
AddHandler server-parsed html xhtml

AddType "text/html; charset=Shift_JIS" html
AddType "application/xhtml+xml; charset=Shift_JIS" xhtml

ひとつ欠点があるとすれば、ファイルの属性を644などにしても「SSIを効かなくする」ことができないところですが、ほとんどのファイルでSSIを使用しているサイトであれば、さほど問題ないかのもしれません。

以上、検証はApache/1.3.12(当サイトのサーバ)で行いました。

(2003年1月15日)

北村曉 kits@akatsukinishisu.net