Nginx 301重定向跳转排除指定目录文件

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

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

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

那么,如何排除favicons这个目录呢,看如下代码

先匹配host的值,避免正确的值被重写

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

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

如果你不懂301跳转的话,可以看这篇文章:Nginx 301跳转到带www域名方法rewrite

由于nginx不允许使用逻辑运算符,不允许多层嵌套,那么请看这篇文章:Nginx多重if判断的逻辑运算

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



赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏