Nginx怎么根據不同瀏覽器語言配置頁面跳轉

簡體和繁體判斷

我想根據http首部的 accept-language 決定提供簡體或繁體的文件。在chrome中, chrome://settings/languages 可以設定偏好語言,瀏覽器會據此設置 accept-language 首部。較好的處理方式是解析該字段,獲取qvalue,根據優先級選取最恰當的語言。但僅用于支持簡繁體,我想用取巧的辦法:忽略優先級,只要 accept-language 里出現了 zh-hant 、 zh-tw 、 zh-hk 等字樣,就返回繁體,否則返回簡體。

map?$http_accept_language?$lang?{ ?default?zhs; ?~zh-hant?zht; ?~zh-tw?zht; ?~zh-hk?zht; }

我用hexo生成網站,源文件用繁體寫成。對于 hexo generate 生成得到的 2015-10-06-nginx-accept-language-zhs-zht.html ,用 opencc 轉換得到簡體版本: 2015-10-06-nginx-accept-language-zhs-zht.html.zhs.html 。視情況還需要轉換其他一些文件,比如 atom.xml 、 提供“閱讀最多文章”功能 的 popular.json 。

#?zsh cd?~/maskray.me/public opencc?-c?t2s.json?-i?atom.xml?-o?atom.xml.zhs.xml for?i?in?**/*.html?20*;?do?#?選擇需要簡繁體支持的文件 ?c=${#${(s/.html/%)i}//[^%]/}?#?計算子串`.html`出現次數 ?if?((?$c?<p>在nginx配置文件中指定需要簡繁體支持的路由:</p><pre class="brush:plain;">location?~?^/blog/20???{ ?try_files?$uri.$lang.html?$uri?=404; ?add_header?vary?accept-language; }  location?~?/atom.xml?{ ?try_files?$uri.$lang.xml?$uri?=404; ?add_header?vary?accept-language; }  location?~?.json$?{ ?try_files?$uri.$lang.json?$uri?=404; ?add_header?vary?accept-language; }  #?其他需要簡繁體支持的路由

根據http請求頭中的accept-language轉發到不同的頁面:
直接上代碼

if?($http_accept_language?~*?^zh){ ????set?$lang?"/index_cn.jsp"; } if?($http_accept_language?!~*?^zh){ ????set?$lang?"/index_en.jsp"; } ? location?=/?{ ????proxy_set_header?host?$host; ????proxy_set_header?x-real-ip?$remote_addr; ????proxy_set_header?x-forwarded-for?$remote_addr; ????proxy_pass?http://localhost:8080$lang; }

測試:
http://www.findmaven.net是一個findjar和findmaven的搜索引擎
瀏覽器設置(英文)

Nginx怎么根據不同瀏覽器語言配置頁面跳轉

Nginx怎么根據不同瀏覽器語言配置頁面跳轉

返回

Nginx怎么根據不同瀏覽器語言配置頁面跳轉

瀏覽器設置(中文)

Nginx怎么根據不同瀏覽器語言配置頁面跳轉

返回

Nginx怎么根據不同瀏覽器語言配置頁面跳轉

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享