我们正在部署一个使用不同顶级域名的国际网站。
我们使用nginx的ipgeo模块来检测用户位置,并在需要时进行重定向。
但是我们发现机器人存在一些问题,因此我们希望在这种情况下防止重定向。
为此,我们需要在nginx配置中使用双重条件,这是不支持的。
我们可以使用不同的解决方案吗?谢谢
这是来自英国配置的代码片段,我认为这是不言自明的。
if ($http_user_agent !~* "google|yahoo|bingbot|baiduspider|yandex|yeti|yodaobot|gigabot|ia_archiver|facebookexternalhit|twitterbot"( { # 转到全局站点 if ($geoip_city_continent_code != "EU"( { 重写 ^ https://xxxx.us$request_uri 永久; } # 转到欧盟网站 if ($geoip_city_country_code != "GB"( { 重写 ^ https://xxxx.eu$request_uri 永久; } # 留在英国网站 }
这可能适用于您的系统。请看一看
if ($http_user_agent !~* "google|yahoo|bingbot|baiduspider|yandex|yeti|yodaobot|gigabot|ia_archiver|facebookexternalhit|twitterbot") {
# Here you can setup a value which will skip redirect.
set $geoip_city_continent_code="UK";
}
# goto global site
if ($geoip_city_continent_code != "EU") {
rewrite ^ https://xxxx.us$request_uri permanent;
}
# goto EU site
if ($geoip_city_country_code != "GB") {
rewrite ^ https://xxxx.eu$request_uri permanent;
}
我们的解决方案来自@Kernelv5。
此外,它为重定向增加了更大的灵活性,而不会增加复杂性。
谢谢
set $continent "${geoip_city_continent_code}";
set $country "${geoip_city_country_code}";
if ($http_user_agent ~* "google|yahoo|bingbot|baiduspider|yandex|yeti|yodaobot|gigabot|ia_archiver|facebookexternalhit|twitterbot") {
set $continent "US";
set $country "US";
}
if ($country = "GB") {
rewrite ^ https://xxxx.co.uk$request_uri permanent;
}
if ($continent = "EU") {
rewrite ^ https://xxxx.eu$request_uri permanent;
}