2017-04-19 83 views
0

我想服务与视在用户浏览器的首选语言设置Apache的不同的文件。即请求头中的“Accept-Language”键。如何配置语言协商Apache中

我跟着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的我清空浏览器缓存。

我使用Apache 2.4.10一个debian杰西系统。

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

回答

1

我建议使用模块重写(mod_rewrite的),只是用户重定向到基于浏览器通过接受语言特定页面。

在您的配置文件中,您可以在<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

+0

重命名'index.html'到'index.html.de'的伎俩,谢谢!请详细说明使用'mod_rewrite'而不是'mod_negotiation'的好处 – steffen