Nginx分段server实现301重定向到带www的https链接

301.jpg

最近一直研究https的301重定向而不得其法。都是可以解决http对https的跳转,而无法实现https根域名到带www的https的跳转,带着精益求精的精神,这是必须要予以解决的。

此前试过的301重定向代码:

方法一

if ($host != 'www.zhujidaba.com'){
rewrite ^/(.*)$ https://www.zhujidaba.com/$1 permanent;
return 301 https://www.zhujidaba.com$request_uri;
}

方法二

if ($scheme = http ) {
return 301 https://www.zhujidaba.com$request_uri;
}

方法三

if ($server_port = 80 ) {
return 301 https://$host$request_uri;
}

方法四

if ($ssl_protocol = "") { return 301 https://www.zhujidaba.com$request_uri; }
if ($host != www.zhujidaba.com) { return 301 $scheme://www.zhujidaba.com$request_uri; }

以上方法都可以完美解决http到https的强制重定向,但是在https不含www的地址与含www的https地址之间表现则差强人意。

经过多方摸索和学习,借鉴于网上《nginx 301重定向带www的https链接配置方法》一文的方法,以作记录。

主要思想是分段server,对不同server_name分别做301重定向,将之重定向到带www的https地址上。

server {
    listen 80;
    server_name zhujidaba.com www.zhujidaba.com;
    return 301 https://www.zhujidaba.com$request_uri;
}
server {
    listen 443 ssl;
    ssl on;
    ssl_certificate     /etc/letsencrypt/live/zhujidaba.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/zhujidaba.com/privkey.pem;
    server_name zhujidaba.com;
    return 301 https://www.zhujidaba.com$request_uri;
}
server {
    listen 443 ssl;
    ssl on;
    ssl_certificate     /etc/letsencrypt/live/zhujidaba.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/zhujidaba.com/privkey.pem;
    server_name  www.zhujidaba.com;
    index index.html index.htm index.php default.html default.htm default.php;
.......
}

第一段server,主要是将非https的 http://www.zhujidaba.comhttp://zhujidaba.com ,通过301重定向到https://www.zhujidaba.com

第二段server,主要是将https://zhujidaba.com ,301重定向到https://www.zhujidaba.com

第三段server,是正常的主机配置文件,头内容是开启SSL,.......省略内容为网站的配置信息。

主机重启nginx即可。这样所有http和不带www的域名都将通过301重定向到了带www的https链接,有利于SEO。

猜您喜欢

发表评论

icon_mrgreen.gificon_neutral.gificon_twisted.gificon_arrow.gificon_eek.gificon_smile.gificon_confused.gificon_cool.gificon_evil.gificon_biggrin.gificon_idea.gificon_redface.gificon_razz.gificon_rolleyes.gificon_wink.gificon_cry.gificon_surprised.gificon_lol.gificon_mad.gificon_sad.gificon_exclaim.gificon_question.gif