2017-04-19 87 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