需求:将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判断,代码看起来更清爽。