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>
それは機能しますが、最初のミスに対してのみです。そう
- http://www.example.com/static/homepage.htmlをリクエスト
Accept-Language: hr
すると、作成されますhomepage.html.hr
(正しい) - ここで、 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>