Nginx 301重定向跳转需要排除指定目录文件的方法

需求:将www的域名地址重定向跳转到非www的顶级域名中,排除admin目录下的文件,也就是说admin的目录文件运行www路径访问而不重定向。

平时我们在做301跳转时是这样的,但是会将所有的www进行重定向到www。

###### 域名重定向 ######
if ($host = 'www.dii123.com') {
rewrite ^/(.*)$ https://dii123.com/$1 permanent;
}

那么,如何排除admin这个目录呢,看如下代码。先匹配host的值,避免正确的值被重写。

###### 域名重定向,admin ######
set $flag 'admin';

if ($host = 'www.dii123.com') {
set $flag '3w';
}
if ($http_uri ~* /admin){
set $flag 'admin';
}
if ($uri ~* /admin){
set $flag 'admin';
}
if ($flag = '3w') {
rewrite ^/(.*)$ https://dii123.com/$1 permanent;
}
###### 域名重定向,排除admin目录 end ######

上面的逻辑代码使用if判断的,其实我更希望使用location来进行一个匹配,匹配到admin目录之后就不进行重定向,不配不上在判断是否www的路径。这样可能一个location就能省略这4个if判断,代码看起来更清爽。

来源:https://www.dii123.com/post/827.html