如何在apache

时间:2017-04-19 22:38:03

标签: html apache

我希望使用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.htmlindex.html.enindex.html.es。我也试过index.en.html等。

问题是:

无论我在浏览器中设置了什么(或者我使用curl在标题中指定的内容),我总是得到index.html

重启apache,我 清空了浏览器缓存。

我在debian jessie系统上使用apache 2.4.10。

如何根据Accept-Language标题获取apache以提供正确的文件?

1 个答案:

答案 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