4

Apache 経由で提供したい多言語の静的コンテンツがいくつかあります。ファイルは、アプリによって JIT で生成されたキャッシュ ファイルであるため、存在する場合はそれらを提供する必要があります。

HTTP のAccept-Languageヘッダーを介して言語を指定します。これはhr, en, でもありますen-US,en;q=0.5(そのため、単純な「言語をファイル名に追加して続行する」ことはできません)。

URL は次のようになります。

私のアプリには、まったく同じレイアウトのフォルダーがあり、次のように言語のみが追加されます。

/static/homepage.html.en
/static/homepage.html.hr
/static/script.js.en
/static/script.js.hr

私はAccept-Language必要な解析のためにそれを理解しmod_negotiation、これを思いつきました:

# Alias
/static /www/app/var/cache/static
<Directory /www/app/var/cache/static>
  FileETag MTime Size
  Options MultiViews
  AddLanguage hr .hr
  AddLanguage en .en
  <IfModule mod_negotiation.c>
    LanguagePriority en hr
  </IfModule>      

  ErrorDocument 404 /index.php
</Directory>

それは機能しますが、最初のミスに対してのみです。そう

  1. http://www.example.com/static/homepage.htmlをリクエストAccept-Language: hrすると、作成されますhomepage.html.hr(正しい)
  2. ここで、 http://www.example.com/static/homepage.htmlをリクエストAccept-Language: enすると、404 がスローされず (ファイル生成プロセスがトリガーされます)、代わりにサービスが提供されますhomepage.html.hr(これは Apache に十分近いですが、正しくありません)。私のため)。

これについて私が見る解決策:

  • PHP経由で静的ファイルを提供する(これは避けたい)
  • を使用していますmod_rewrite(ただし、Accept-Language解析部分がありません)
  • すべてのファイルを事前に生成する (これは非常に面倒なようです)

4番目の方法または私が見逃しているものはありますか?

編集:受け入れられた回答による完全なソリューション

# Alias
/static /www/app/var/cache/static
<Directory /www/app/var/cache/static>
  FileETag MTime Size
  Options MultiViews
  AddLanguage hr .hr
  AddLanguage en .en
  <IfModule mod_negotiation.c>
    LanguagePriority en hr
    ForceLanguagePriority none
  </IfModule>      

  ErrorDocument 404 /index.php
  ErrorDocument 406 /index.php
</Directory>
4

2 に答える 2