行业动态

防御吧作为15年知名老牌域名服务商,CNNIC和CANN双认证域名注册商,已经
持续为500多万个域名提供服务,包括智能DNS/自由转移/隐私保护等服务!
Nginx服务器中HTTP 301跳转到带www的域名的方法
2022-01-05 13:44:13 【

从nginx的官方文档 documentation, 正确的nginx https 301跳转到带www域名方法的方法如下:

HTTP 301跳转到带www域名方法

 

复制代码 代码如下: server {
       listen       80;
       server_name  XXX.org;
       return       301 http://www.XXX.org$request_uri;
   }

   server {
       listen       80;
       server_name  www.XXX.org;
       ...
   }  

HTTPS 301跳转到带www域名方法

复制代码 代码如下:   server {
           listen 80;
           server_name www.domain.com;
           // $scheme will get the http protocol
           // and 301 is best practice for tablet, phone, desktop and seo
           return 301 $scheme://domain.com$request_uri;
   }
   
   server {
           listen 80;
           server_name domain.com;
           // here goes the rest of your config file
           // XXX
           location / {
   
               rewrite ^/cp/login?$ /cp/login.php last;
               // etc etc...
   
           }
   }
   

要先用 nginx -v  命令检查你所说使用的nginx的版本. 下面是对于旧版本的nginx301跳转到带www域名方法从www.ksharpdabu.info 跳转到  ksharpdabu.info

 

复制代码 代码如下:server {
       server_name  www.domain.com;
       rewrite ^(.*) http://domain.com$1 permanent;
   }

   server {
       server_name  domain.com;
       #The rest of your configuration goes here#
   }


所以需要两个server段。

从ksharpdabu.info 跳转到  www.ksharpdabu.info

 

复制代码 代码如下:server {
       server_name  domain.com;
       rewrite ^(.*) http://www.domain.com$1 permanent;
   }

   server {
       server_name  www.domain.com;
       #The rest of your configuration goes here#
   }


按上面设置后,用rewrite的方法跳转到指定的域名下,利于SEO
下面是我举例,从www.google.com 跳转到 google.com的部分nginx配置内容:

 

复制代码 代码如下:server {
       server_name  www.google.com;
       rewrite ^(.*) http://google.com$1 permanent;
   }
   server {
          listen 80;
          server_name google.com;
          index index.php index.html;
          ####
          # now pull the site from one directory #
          root /var/www/www.google.com/web;
          # done #
          location = /favicon.ico {
                   log_not_found off;
                   access_log off;
          }
   }


网上还有一种不用rewirte的 方法,如下:

 

复制代码 代码如下:server {
       #listen 80 is default
       server_name www.XXX.com;
       return 301 $scheme://XXX.com$request_uri;
   }

   server {
       #listen 80 is default
       server_name XXX.com;
       ## here goes the rest of your conf...
   }


因为return可以用于所有的版本,而rewrite可能因为版本的不同,导致301出错。而且可以直接停止执行匹配和搜索。

下面包含了http和https的。同一个服务器。

 

复制代码 代码如下:server {
       listen 80;
       listen 443 ssl;
       server_name www.XXX.com;
       return 301 $scheme://XXX.com$request_uri;
   }

   server {
       listen 80;
       listen 443 ssl;
       server_name XXX.com;
       # rest goes here...
   }


$scheme 变量只会包含http 如果你的服务器只监听80端口(默认是80端口)同时监听的选项中不含ssl关键字 . 不适用这个变量,就不能获得你所想的要的跳转结果。

将所有http强制跳到https, SSL (personal config on UNIX with IPv4, IPv6, SPDY, ...):

复制代码 代码如下:#
# Redirect all www to non-www
#
server {
   server_name          www.XXX.com;
   ssl_certificate      ssl/XXX.com/crt;
   ssl_certificate_key  ssl/XXX.com/key;
   listen               *:80;
   listen               *:443 ssl spdy;
   listen               [::]:80 ipv6only=on;
   listen               [::]:443 ssl spdy ipv6only=on;

   return 301 https://XXX.com$request_uri;
}

#
# Redirect all non-encrypted to encrypted
#
server {
   server_name          XXX.com;
   listen               *:80;
   listen               [::]:80;

   return 301 https://XXX.com$request_uri;
}

#
# There we go!
#
server {
   server_name          XXX.com;
   ssl_certificate      ssl/XXX.com/crt;
   ssl_certificate_key  ssl/XXX.com/key;
   listen               *:443 ssl spdy;
   listen               [::]:443 ssl spdy;

   # rest goes here...
}

#
# Redirect all www to non-www
#
server {
   server_name          www.XXX.com;
   ssl_certificate      ssl/XXX.com/crt;
   ssl_certificate_key  ssl/XXX.com/key;
   listen               *:80;
   listen               *:443 ssl spdy;
   listen               [::]:80 ipv6only=on;
   listen               [::]:443 ssl spdy ipv6only=on;

   return 301 https://XXX.com$request_uri;
}

#
# Redirect all non-encrypted to encrypted
#
server {
   server_name          XXX.com;
   listen               *:80;
   listen               [::]:80;

   return 301 https://XXX.com$request_uri;
}

#
# There we go!
#
server {
   server_name          XXX.com;
   ssl_certificate      ssl/XXX.com/crt;
   ssl_certificate_key  ssl/XXX.com/key;
   listen               *:443 ssl spdy;
   listen               [::]:443 ssl spdy;

   # rest goes here...
}


】【打印关闭】 【返回顶部
分享到QQ空间
分享到: 
上一篇没有了 下一篇免备案与备案云主机怎么选?

立足首都,辐射全球,免备案服务器网专注云防御及云计算服务15年!

联系我们

服务热线:010-56157787 ,010-56159998
企业QQ:4000043998
技术支持:010-56159998
Copyright ? 2003-2016 gnmianbeian.com. 免备案服务器网版权所有 增值许可:京B2-20140042号
售前咨询
公司总机:4000043998 01056155355
24小时电话:010-56159998
投诉电话:18910191973
值班售后/技术支持
售后服务/财务
备案专员
紧急电话:18610088800