ApacheのMultiviewsで、htmlを多言語対応

index.html.jaとindex.html.enの2ファイルを置いて、日本語版と英語版をApacheまかせで切り換える……ってのは時々見かけていたけど、自分でやろうとしてみたのでちょっとメモ。

導入準備

hoge.htmlをリクエストされたら言語判断をしてhoge.html.ja(もしくはhoge.html.en)を返す、というのはApacheコンテントネゴシエーション機能のMutiviewsを利用している。というわけでまずはApacheの設定(httpd.confもしくは.htaccess)で、

Options Multiviews

を有効にする。
しかしこのMultiviewsは副作用も大きいので、単にちょっと言語切り換えたい〜ってライトな理由だけで導入するのはあんまりお勧めできない。本来404 Not Foundになるべきものがならないため、思わぬ弊害をもたらすことがある。(副作用が大きいからこそ、"Options All"しても「MultiViews を除いた全ての機能が有効となります。」となっているんだな……)
でも、最近の「クールなURLを!」というノリに従って、導入しているところは多そうだ。

Multiviewsで多言語対応

Multiviewsが効くようになったら、あとは該当のディレクトリに.htaccessファイルを設置して、

AddLanguage ja .ja
AddLanguage en .en

とりあえずこれで2言語対応。hoge.htmlと叩かれたら、自動的にブラウザのAccept-Languageヘッダを判断して適切なものを返してくれる。すなわち、日本語ならhoge.html.ja、英語ならhoge.html.en。
またMultiviewsはDirectoryIndexにも効くので、例えばindex.php.jaとindex.php.enを用意しておけばよろしくやってくれる。