Nginx geoip重定向,但排除URL

时间:2019-07-17 08:10:38

标签: nginx url-rewriting geoip

当前,我在Nginx中具有以下用于GeoIP重定向的设置:

set $fromAU 0;
set $isAUuri 0;
set $isUSuri 0;
if ( $geoip_country_code = "AU" ) { set $fromAU 1; }
if ( $request_uri ~* "^/australia" ) { set $isAUuri 1; }
if ( $request_uri ~* "^/usa-can" ) { set $isUSuri 1; }
if ( $request_uri ~* ^/(wp-admin|wp-login\.php) ) { set $isUSuri 1; }
set $redirectableAU "${fromAU}${isAUuri}";
if ( $redirectableAU = "10"  ) { rewrite "^(/australia)?(.*)" $scheme://$host/australia permanent; }
if ( $redirectableAU = "01"  ) { rewrite "^(/australia)?(.*)" $scheme://$host/usa-can permanent; }
set $redirectableUS "${fromAU}${isUSuri}";
if ( $redirectableUS = "00"  ) { rewrite "^(/australia)?(.*)" $scheme://$host/usa-can permanent; }

它按预期工作,但有一个小问题:

domain.com/wp-admin->可以正常工作

domain.com/usa-can/wp-admin->可以正常工作

domain.com/australia/wp-admin->重定向到/ usa-can

我正在尝试为美国和非盟地区设计GeoIP重定向,在前端工作正常,但是问题在于最后的wp-admin重定向,任何见解将不胜感激:)

1 个答案:

答案 0 :(得分:0)

我将使用nginx的map模块,因为它针对快速查找进行了优化。 https://nginx.org/en/docs/http/ngx_http_map_module.html

# partly adopted from 
# https://www.digitalocean.com/community/tutorials/how-to-use-nginx-s-map-module-on-ubuntu-16-04

# My countries
#
map $geoip_country_code $fromAU {
    default 0;
    AU 1;
}

map $request_uri $redirect_uri {
    default /wp-admin;
     ~*^/australia /australia/wp-admin;
     ~*^/usa-can /usa-can/wp-admin;
}

if ( $fromAU = "1"  ) { redirect $scheme://$host/$redirect_uri permanent; }
if ( $fromAU = "0"  ) { redirect $scheme://$host/$redirect_uri permanent; }