在Nginx中,可以根据浏览器的Accept-Language
头部信息来配置不同语言的页面跳转。以下是几种实现方式:
server {
listen 80;
server_name example.com;
# 默认跳转到英文版
set $lang "en";
# 根据Accept-Language头部判断
if ($http_accept_language ~* "zh") {
set $lang "zh";
}
if ($http_accept_language ~* "fr") {
set $lang "fr";
}
if ($http_accept_language ~* "de") {
set $lang "de";
}
if ($http_accept_language ~* "ja") {
set $lang "ja";
}
location / {
rewrite ^/$ /$lang/index.html redirect;
}
}
map $http_accept_language $lang {
default en;
~*zh zh;
~*fr fr;
~*de de;
~*ja ja;
~*es es;
}
server {
listen 80;
server_name example.com;
location / {
rewrite ^/$ /$lang/index.html redirect;
}
}
server {
listen 80;
server_name example.com;
location / {
if ($http_accept_language ~* "zh") {
return 301 /zh-CN/;
}
if ($http_accept_language ~* "fr") {
return 301 /fr-FR/;
}
# 默认跳转到英文版
return 301 /en-US/;
}
}
优先级处理:浏览器可能发送多个语言选项(如zh-CN,zh;q=0.9,en;q=0.8
),上述简单匹配会取第一个匹配项。如需更精确处理,需要更复杂的正则表达式。
Cookie优先:通常更好的做法是先检查用户是否已经通过Cookie选择了语言,如果没有再使用浏览器语言设置:
map $http_cookie $preferred_lang {
default "";
"~*lang=([a-z-]+)" $1;
}
map $preferred_lang:$http_accept_language $lang {
default en;
"~*:(.*zh.*)" zh;
"~*:(.*fr.*)" fr;
# 其他语言...
}
性能考虑:map指令比if条件更高效,推荐优先使用map方式。
SEO考虑:确保为搜索引擎提供明确的hreflang标签和站点地图,避免SEO问题。
后备方案:总是提供一个默认语言选项,以防无法匹配任何语言设置。
希望这些配置能帮助你实现基于浏览器语言的页面跳转功能!