ブラウザの言語設定を元にその言語のファイルを表示させる方法のメモ。(不確かな内容があります)
目次
トップのフォルダに以下のような英語、日本語のトップページがある場合。
英語:http://www.mysite.com/index.html
日本語:http://www.mysite.com/indexjp.html
http://www.mysite.com/ にアクセスすると言語設定を検出して
英語の場合は
http://www.mysite.com/index.html を表示
日本語の場合は
http://www.mysite.com/indexjp.html を表示させるようにする。
英語の index.html を index.html.en という名前で保存
日本語の indexjp.html を index.html.ja という名前で保存
以下を .htaccess に記述する。
.htaccess
#MultiViews を有効にする Options +MultiViews #ファイル名を指定された言語にマップ AddLanguage ja .ja AddLanguage ja-jp .ja AddLanguage ja-jp-mac .ja AddLanguage en-us .en AddLanguage en .en # 優先度が設定されていない場合の優先順位 LanguagePriority en ja ForceLanguagePriority Prefer ForceLanguagePriority Fallback DirectoryIndex index # 言語名の拡張子が付いていないファイルの言語名 DefaultLanguage en
「index.html.en」と「index.html.ja」をアップロード。
これで「http://www.mysite.com/」にアクセスすると言語設定を検出してその言語のページ( index.html.ja または index.html.en)が表示される。
この時、以下のようにファイル名を指定すればそのページが表示される。
http://www.mysite.com/index.html を表示
http://www.mysite.com/indexjp.html を表示
また、もし「index.html」と「indexjp.html」を削除すると
「http://www.mysite.com/」
「http://www.mysite.com/index.html」
のいずれでアクセスしても言語設定を検出してその言語のページが表示される。
但し、これが期待する動作かどうかはページの構成によると思われる。
上記の例の場合、日本語の環境の場合には「http://www.mysite.com/」,「http://www.mysite.com/index.html」のいずれでアクセスしても「indexjp.html」が表示されるが、もしこのページに英語ページ「index.html」へのリンクがあってもそれは「indexjp.html」にリダイレクトされ、英語ページへ移動できない。
追加情報
2014年5月6日
さくらインターネットのスタンダードプラントいうのを始めて使ってみて、上記の設定をしてみたがエラーになってしまった。 .htaccess での Options ディレクティブによる設定が制限されているためだろうか。
試しに「Options +MultiViews」をコメントアウトしたらエラーが消えて機能している。。。但し、別のレンタルサーバーでは「Options +MultiViews」を設定しないとエラーになる。。。共用サーバーではそれぞれ設定が異なるので色々試すしかないみたい。
サーバー(Apache)がブラウザにより提供されたメディアタイプ、 言語、文字セット、エンコーディングの優先傾向に基づいて、 最適なリソースの表現を選択する仕組み。適切な Accept* ヘッダフィールド(Accept-Language, Accept-Charset等)を調べて処理をする。
Apache におけるネゴシエーションでは、以下の二つの方法のどちらかで行われる。
MultiViews は、ファイルが 要求された時に、最適なファイルを探すように Apache に命令するもので、例えばユーザーエージェントから送信される Accept-Language ヘッダ値に「en」が優先されていれば英語版のファイル、「ja」が優先されていれば日本語版のファイルが送り出されるようになる。
MultiViews はディレクトリ毎のオプションで、httpd.conf や .htaccess で Options ディレクティブによって設定することができる。 Options All が指定されていても MultiViews 機能は有効にならないので明示的に記述する必要がある。
Options +MultiViews で MultiViews を有効にすることができる。
また、MultiViews は DirectoryIndex ディレクティブで指定されたファイルを探す過程にも適用される。
Prefer と Fallback の両方のオプションを 同時に指定することができ、複数の variant があるときは LanguagePriority の最初の variant が送られ、クライアントの許容言語に合う vaiant がないときは 存在するドキュメントで最初のものが送られるようにすることができる。
上位ディレクトリでのOptions設定は原則として下位ディレクトリまで適用されるが、プラス記号(+)によって先に無効にされていたオプションを有効にすることができる。逆にマイナス記号(-)は有効だった設定を無効にする。記号省略時は、上位ディレクトリでのOptions設定を継承せず、新規にOptions設定が適用される。
http://www.ipa.go.jp/security/awareness/administrator/secure-web/chap4/4_apache.html