我需要根据客户端的 IP 和 WPML Wordpress 插件在 cookie 中设置的值执行重定向。
我更喜欢使用 map 指令来实现此目的。摘录自nginx.conf
geoip_country /usr/local/share/GeoIP/maxmind_countries.dat;
geoip_city /usr/local/share/GeoIP/maxmind_cities.dat;
map $host:$geoip_country_code:$cookie_wp-wpml_current_language $redirect {
"example.com:UA:''" "1";
"example.com:UA:'uk'" "0";
"example.com:UA:'ru'" "0";
}
然后在域名配置文件我只是检查使用$重定向在条件语句中
if ($redirect) {
rewrite ^https://example.com/uk break;
}
因此,我的问题是:如何以正确的方式检查 cookie 的值,以及如何检查 cookie 是否未设置(具有空值),特别是使用地图指令nginx?
答案1
下面列出的配置符合我的需求
map $host $redirect_host {
example.com 1;
default 0;
}
map $geoip_country_code $redirect_country {
UA 1;
default 0;
}
map $cookie_wp-wpml_current_language $redirect_cookie {
uk 0;
ru 0;
default 1;
}
map $redirect_host:$redirect_country:$redirect_cookie $make_redirect {
1:1:1 1;
}
然后使用$make_redirect域配置中的变量
if ($make_redirect) {
rewrite ^https://example.com/uk break;
}
答案2
我会将几个map
条件拆分成不同的块:
map $host $redirect_host {
example.com 1;
default 0;
}
map $geoip_country $redirect_country {
UA 1;
default 0;
}
map $cookie_wp-wpml_current_language $redirect_cookie {
uk 0;
default 1;
}
然后检查以下情况:
if (${redirect_host}${redirect_country}${redirect_cookie} = 111) {
return 301 https://www.example.com/uk/;
}
您需要检查每个变量的默认值和条件以满足您的目的,这只是概念的一个说明。