实现在nginx下http和https配置不带www跳转到www

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_27295403/article/details/97890318

前言:许多用户习惯了从 baidu.com(主域名) 打开百度而不是 www.baidu.com (二级域名)。实际上这两个是不同级别的域名,只是为了访问方便而许多大网站都对不带WWW的域名做了跳转。所实现的技术就叫做301重定向,基于网址唯一性, 减少网站重复内容,让用户的体验更好,同时也对收录有一定的好处, 最好将网站做下301跳转, http跳转到https, 以及不带www和带www之间的跳转

前提条件:

  • 默认xxx.com和www.xxx.com的解析指向同个ip
  • 基于lnmp

配置文件conf

server {
    listen       80;
    server_name xxx.com,www.xxx.com;
    return 301 https://www.xxx.cn$request_uri;
}
server {
    listen 443;
    server_name xxx.com;
    return 301 https://www.xxx.com$request_uri;
}
server {
    listen 443 default_server ssl;
    server_name  www.xxx.com;
    ssl on;
    ……
}

当然还有多种方式:

Nginx下常见的301跳转有以下三种,虽然都能达到同样的目的。但是三种写法上还是有区别的,主要的区别是在正则匹配的性能上。
第一种:使用rewrite指令,通过正则匹配所有的URI后再去掉开头第一个/(反斜线)。

rewrite ^/(.*)$ https://www.xxx.com/$1;

第二种:同样使用rewrite指令,不同的是通过$request_uri变量匹配所有的URI。

rewrite ^ https://www.xxx.com$request_uri? permanent;

第三种:使用return指令,通过301状态码和$request_uri参数,直接告诉Nginx这是个301重定向和抓取指定URI。

return 301 https://www.xxx.com$request_uri;

这种方法是性能上最优的,因为rewrite指令有很多写法和规则,执行完所有正则匹配后,Nginx 才会知道这是一个301永久重定向。

猜你喜欢

转载自blog.csdn.net/qq_27295403/article/details/97890318