需求
我有个 MediaWiki 站点,它有多种语言版本,分别在 zh.wiki.marioforever.net
和 en.wiki.marioforever.net
,host 为 wiki.marioforever.net
时,此前一直是 301 重定向到 zh
子域名。现在要求实现在中文环境下跳转到 zh
,其他语言环境下跳转到 en
。Web 服务器是 nginx。
配置
nginx 不支持 if
嵌套和 if
条件的逻辑运算,所以传统的思路行不通。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| # 判断是否在访问 wiki 子域名 if ($host = wiki.marioforever.net) { set $redirect 1; }
# 判断浏览器语言,1 为中文 set $lang 0; if ($http_accept_language ~* ^zh) { set $lang 1; }
# 使用变量代替逻辑运算 set $sign "${redirect}${lang}";
if ($sign = 11) { return 302 $scheme://zh.wiki.marioforever.net$request_uri; } if ($sign = 10) { return 302 $scheme://en.wiki.marioforever.net$request_uri; }
|