Nginx服务器中HTTP 301跳转到带www的域名的方法

<返回列表

从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...}

国内免备案VPS301跳转服务器国内免备案服务器域名被墙跳转301,绕过信息安全中心不能放违反法律法规内容!(北京免备案  镇江免备案 江苏免备案 辽宁免备案vps 山东联通免备案) 
分享新闻到:

更多帮助

关于网站备案的常见问题

新闻中心 2025-01-12
网站备案是加强和规范互联网网站管理推动互联网健康发展的重要举措 1、什么是网站备案?...
查看全文

一个国际网站需要多少个海外服务器来搭

新闻中心 2025-01-11
一个国际网站需要多少个海外服务器来搭建运营?这个问题不是很好回答,因为影响国际网站...
查看全文

域名被墙和域名DNS污染的区别是什么?

新闻中心 2025-01-11
域名被墙是什么? 域名被墙是指被(Great Firewall以下简称GFW)也称中国防火墙或中国国家防火...
查看全文