2015-08-21 81 views
1

我們有1個網站,其中有4種語言,其中3個是在子文件夾,即.htaccess的語言檢測到特定的文件夾,默認EN語言不是一個文件夾

/ 
    /de/ 
    index.html 
    about-us.html 
    ... 

    /fr/ 
    index.html 
    about-us.html 
    ... 

    /index.html 
    /about-us.html 
    ... 

默認EN語言不在像其他人一樣(上面),他們在根。

我有htaccess代碼到目前爲止,我可以通過%{HTTP:Accept-Language}檢測3種語言,它的工作原理。

我遇到的問題是,當他們點擊導航欄中的EN選項(/)時,語言檢測通過htaccess啓動。我如何做到這一點,如果它已被點擊,我可以告訴.htaccess忽略語言檢測?

我試過HTTP_referer路由,我說如果沒有檢測到引用,檢測語言並繼續,如果引用者是網站名稱,則忽略它。這不起作用(太多重定向)。

我沒有服務器端支持,因爲這些文件實際上是通過Gulp構建的所有html文件,但如果沒有其他解決方案可用,WORSE情況下可以使用它。

回答

1

friend的幫助下,如果找不到具有值語言的cookie,我最終沿着通過htaccess創建cookie的路線走下去。一旦設置了語言並且用戶然後去查看英文內容(位於htaccess所在的根路徑中),htaccess將不會執行語言檢測。

RewriteEngine On 

# 301 = aggressively by the browser (use only on Production/Live) 
# 302 = temporary redirect (use for development) 
RewriteCond %{HTTP_COOKIE} !language=set [NC] 
RewriteCond %{HTTP:Accept-Language} fr [NC] 
RewriteRule ^$ /fr [co=language:set:%{HTTP_HOST}:10:/,L,R=302] 

RewriteCond %{HTTP_COOKIE} !language=set [NC] 
RewriteCond %{HTTP:Accept-Language} de [NC] 
RewriteRule ^$ /de [co=language:set:%{HTTP_HOST}:10:/,L,R=302] 

RewriteCond %{HTTP_COOKIE} !language=set [NC] 
RewriteCond %{HTTP:Accept-Language} es [NC] 
RewriteRule ^$ /es [co=language:set:%{HTTP_HOST}:10:/,L,R=302] 

從這個頁面(Tips for debugging .htaccess rewrite rules)也有幫助,我使用的是301在本地進行重定向,這是由瀏覽器緩存積極至關重要此片段,使其難以調試。

301提示

  • 不要使用301,直到你完成測試我已經看了很多帖子,人們還在測試他們的規則,他們使用的是301的。 不要。如果您的網站沒有使用建議1,那麼您不僅需要 ,而且當時訪問您網站的任何人都將受到301. 的影響。請記住,它們是永久性的,並且會被您的 瀏覽器積極緩存。使用302,而不是直到你確信,然後將其更改爲301