我希望使用apache提供不同的文件,具体取决于用户浏览器中的首选语言设置。即请求标题中的“Accept-Language”键。
我关注this description而我放
Options +MultiViews
AddLanguage de .de
AddLanguage en .en
AddLanguage es .es
LanguagePriority en de es
ForceLanguagePriority Fallback
在我的apache2.conf中生成文件index.html
,index.html.en
和index.html.es
。我也试过index.en.html等。
问题是:
无论我在浏览器中设置了什么(或者我使用curl
在标题中指定的内容),我总是得到index.html
我 重启apache,我 清空了浏览器缓存。
我在debian jessie系统上使用apache 2.4.10。
如何根据Accept-Language
标题获取apache以提供正确的文件?
答案 0 :(得分:2)
我建议使用Rewrite(mod_rewrite)模块,只需根据浏览器传递的Accepted-Language将用户重定向到特定页面。
在配置文件中,您可以在<Directory></Directory>
标记中添加内容,或者只在<VirtualHost></VirtualHost>
标记的中间添加内容,以便为您进行重定向。
由于您在示例中提供了德语,英语和西班牙语,因此您可以添加以下行:
RewriteEngine On
RewriteCond %{HTTP:Accept-Language} ^de [NC]
RewriteRule ^/$ http://your-site.com/index.html.de [L,R=301]
RewriteCond %{HTTP:Accept-Language} ^es [NC]
RewriteRule ^/$ http://your-site.com/index.html.es [L,R=301]
RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule ^/$ http://your-site.com/index.html.en [L,R=301]
但是,如果您希望继续使用问题中的方法。您必须首先确保在HTTPD.CONF文件中加载mod_negotiation。
您也不得包含文字 index.html 文件,但请告知您的网站查找文件。
所以它看起来像这样
<Directory "/your/directory/path">
Options +MultiViews
DirectoryIndex index.html
AddLanguage de .de
AddLanguage en .en
AddLanguage es .es
LanguagePriority en de es
ForceLanguagePriority Fallback
</Directory>
然后,对于您的索引文件,只需确保index.html.en,index.html.de和index.html.es存在。
这将起作用,因为Apache将查看 DirectoryIndex 指令并搜索 index.html 。但是,由于index.html不存在,MultiViews选项将尝试找到最接近的选项以最好地满足用户的请求。因此,如果用户选择英语作为首选项,则会加载index.html.en