web-dev-qa-db-ja.com

言語と文字セットでindex.htmlを提供する(過去のもの)

デジタル考古学プロジェクトで、2001年以降のファイルを持つWebサーバーディレクトリを見つけました。このファイルには、異なる言語と言語文字セットの2つの文字コードで終わる名前を持つindex.htmlファイルの独特のコレクションがありました。

index.html.ca       index.html.ja.jis   index.html.ru.iso-ru
index.html.cz       index.html.kr.iso-kr    index.html.ru.koi8-r
index.html.de       index.html.lb.utf8  index.html.ru.ucs2
index.html.dk       index.html.nl       index.html.ru.ucs4
index.html.ee       index.html.nn       index.html.ru.utf8
...

Accept-Languageヘッダーの値に基づいて異なる静的ページを提供するように最新のApacheを構成するにはどうすればよいですか?

3
Dmitri Chubarov

これらのファイルは、ほぼ確実に Apacheコンテンツネゴシエーション で提供されることを意図しています。明示的な型マップとして機能する.varファイルは存在しないようであり、ファイル名の拡張子は標準の言語および文字セットコードに対応しているため、おそらく暗黙的な MultiViews メカニズム。

これらのファイルを含むディレクトリに対してMultiViewsを有効にするには、そのディレクトリの.htaccessファイル(またはグローバルApache構成の対応する<Directory>セクション)に次のディレクティブを追加します。

Options +MultiViews

これにより、HTTP AcceptAccept-CharsetおよびAccept-Languageヘッダーで示される言語、MIMEタイプ、および文字セット設定に基づいて追加の拡張子を追加することにより、Apacheが存在しないファイルの要求を自動的に解決します。たとえば、index.htmlのリクエストにより、Apacheはユーザーの設定言語に応じてindex.html.deまたはindex.html.ja.jisまたはindex.html.ru.utf8のコンテンツを代わりに返す可能性がありますブラウザ。

コンテンツネゴシエーションに加えて、ユーザーが好みのページのバージョンを明示的に選択する方法も提供する必要があることに注意してください。 MultiViewsを使用する場合、これは、言語コードを含む翻訳済みページへの直接リンクを提供するのと同じくらい簡単です。

2
Ilmari Karonen

検索エンジンが各言語の一意のURLを表示できるように、リダイレクトを発行することをお勧めします。 。htaccessファイルで使用できる書き換えルールを次に示します。

RewriteCond %{HTTP:Accept-Language} ^de [NC]
RewriteRule ^index.html$ /index.html.de [L,R=302]
RewriteCond %{HTTP:Accept-Language} ^ru [NC]
RewriteRule ^index.html$ /index.html.ru.utf8 [L,R=302]
...
  • NCは「大文字と小文字を区別しない」(大文字と小文字を区別しない)
  • Lは「last」です(他のルールの処理を停止します)
  • R=302は一時的なリダイレクトです

認識された値でヘッダーを送信しないブラウザには、デフォルトのindex.htmlが引き続き必要です。

2