.htaccessファイルは、分散設定ファイルとも呼ばれ、Webサーバーの挙動を設定することができるファイルのひとつで、WebサーバーとしてApacheが使用されていて、管理者が.htaccessファイルの設置を許可していれば使用することができます。
MultiViews
Prefer :同様の選択肢がいくつも存在する時にMULTIPLECHOICES(HTTP300)
設定方法
Apacheは、http.confにディレクティブという命令を記述することで設定しますが、http.confは管理者にしか編集できなくなっています。それに対して、.htaccessファイルは各ユーザーがディレクトリ単位に設定することができます。ファイルの構文は、主設定ファイルのhttp.confファイルと同じです。
注意事項
- 基本的に、http.confファイルにアクセスできない場合以外は極力使用しない
- FTPで転送する場合、ASCIIモードまたは、テキストモードを使用する
- Windowsで編集する場合、一旦htaccess.txtなどに置き換え、サーバーに配置後にリネームする
- 設置されたディレクトリと配下ディレクトリ全てに影響する
- 構文誤りや管理者が許可していないディレクティブを使用した場合、該当ディレクトリ配下のファイルアクセスが、500 Internal Server Errorになる
- 最終行には、改行を入れる
使い方
いろんな使い方ができるみたいですが。ざっくりとですが、こんなことができるみたいです。勉強しながら少しずつ記事にしていきたいと思っています。
使い方概要今回は、多言語対応について記事を書きます。
- セキュリティ関連
- エラーページ制御
- キャッシュ制御
- ページ表示の高速化
- 多言語対応
多言語対応・MultiViews
HTML/1.1では、ユーザーエージェントのヘッダに含まれるメタデーター(メディアタイプ、言語、文字セット、エンコーディングなどの優先傾向に基づいて)を判別し、複数のリソースの中から最適なものを選択するためのコンテント・ネゴシエーションという仕組みが定められています。例えば、ユーザーエージェントから送信されるAccept-Languageヘッダ値にenが優先されていれば英語版のファイルをjaが優先されていれば日本語版のファイルが送信されるようになります。
ただし、言語の数が多かったりディレクトリ内にファイルやリソースが多く存在する場合などには、適切な言語を探し出すのに時間がかかることがあり、そのような場合には、MultiViewsの代わりにtype-mapハンドラを使用する方が良いそうです。
詳細は、Apacheコンテントネゴシエーションを参照して下さい。
MultiViews
Apacheには、コンテントネゴシエーションを簡単に利用できるようMultiViewsという機能が用意されています。MultiViewsはディレクトリ毎のオプションで、httpd.confや.htaccessでOptionsディレクティブによって設定することができます。Options Allが指定されていても、MultiViews機能は有効にならないので明示的に指定する必要が有ります。
MultiViews機能を有効にするには次のように記述します。
記述例Options +MultiViews
日本語と英語の2か国語を利用する場合には、次のように記述し言語コードと拡張子を関連付けします。
記述例
AddLanguage en .enAddLanguage ja .ja
この設定で、.jaという拡張子のファイルは日本語、.enという拡張子のファイルはファイルは英語に関連付けされます。
そして、サーバー上に日本語版と英語版のファイルにそれぞれの拡張子を付けたファイル名で格納します。
index.html.enindex.html.ja
AddLanguageディレクティブ
拡張子に指定された言語を関連付けします。
AddLanguagディレクティブの詳細はこちらを参照。
構文AddLanguage MIME-lang extention [extention] ...
MIME-langは、拡張子を含んだファイルのMIMEにおける言語で、新たな関連付けは既存の関連付けに追加され同じ拡張子の関連付けは上書きされます。引数のextentionは、大文字小文字の区別をせず最初のドットは省略できます。複数の言語が同じ拡張子に割り当てられている場合には、最後に定義されているものが有効になります。
デフォルトの言語ファイル設定
設定した言語がユーザーのブラウザの言語設定にない場合、コンテントネゴシエーションをサポートしていない場合に、NOT ACCEPT(HTTP406)エラーにならないようにするためデフォルトの言語を設定します。
LanguagePriorityディレクティブ
MultiViewsリクエストを使用する時にクライアントが言語の優先順位を提供していない場合に言語の優先順位を設定します。
構文LanguagePriority MIME-lang [MIME-lang] ...
言語キーワードを優先順位の高い順に記述します。このディレクティブは、ForceLanguagePriorityディレクティブが、None以外の場合にのみ有効になります。
ForceLanguagePriorityディレクティブ
リクエストに合うドキュメントをひとつだけ返すことができない場合に、LanguagePriorityディレクティブを使ってネゴシエーション結果を返します。
None :ForceLanguagePriorityディレクティブの機能を無効にする構文ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback] ...
Prefer :同様の選択肢がいくつも存在する時にMULTIPLECHOICES(HTTP300)
を返却する代わりに、LanguagePriorityを使ってひとつだけドキュメント
を返すようにする
ユーザーのAccept-Languageヘッダの言語の優先順位が同じ場合は、
LanguagePriorityの中の最初に一致する言語のコンテンツを返却する
Fallback:ユーザーのAccept-Languageヘッダに指定された言語のコンテンツが
Fallback:ユーザーのAccept-Languageヘッダに指定された言語のコンテンツが
存在しない場合は、NOT ACCEPT(HTTP406)を返却する代わりに
LanguagePriorityの中の最初に一致する言語のコンテンツを返却する
PreferとFallbackの両方のオプションを同時に指定すると、複数の候補が存在する場合にLanguagePriorityの最初の候補が返却され、クライアントの許容する言語に合う候補が存在しない時には存在するドキュメントで最初のものが返却されます。