Nginx下301重定向域名的方法

编辑/usr/local/nginx/conf下的nginx.conf,在server部分server_name下边添加或修改,如果是ssl,则在https部分的server的server_name下边添加或修改:

方法一:所有绑定域名跳转到指定域名,可用于旧域名跳转到新域名,不带www的网址跳转到带www的网址

server {
	listen 80;
	server_name www.tddx.net tddx.net;
	if ($host != 'www.tddx.net') {
	  return 301 http://www.tddx.net$request_uri;
	}
}

PS:如果不加 if 判断则会导致不断重定向,从而无法访问。

方法二:非指定域名都跳转到另一个指定域名

如果不是test.tddx.net域名,都跳转到指定域名

server 
	{
		listen 80;
		server_name www.tddx.net tddx.net test.tddx.net;
		if ($host != 'test.tddx.net' ) {
			rewrite ^/(.*)$ https://www.tddx.net/$1 permanent;
		}
	}

PS:跳至的域名不能在 server_name 列表中,否则会陷入无限重定向中

方法三:不带www的https跳转到带www的https,添加在监听443端口的server位置

在https的server部分的server_name下边添加

server
    {
        listen 443 ssl http2;
        #listen [::]:443 ssl http2;
        server_name www.tddx.net tddx.net;
        if ($host = 'tddx.net') {
          return 301 https://www.tddx.net$request_uri;
        }
    }

方法四:http跳转到https,添加在监听80端口的server位置

server 
	{
		listen 80;
		server_name www.tddx.net tddx.net;
		return 301 https://www.tddx.net$request_uri;
	}

示例(部分代码):除了www.tddx.net外的所有域名都跳转到带https的域名上

server {
	server_name www.tddx.net tddx.net;
	if ($host != 'www.tddx.net' ) {
		rewrite ^/(.*)$ https://www.tddx.net/$1 permanent;
	}
	...
} 
提示:如果是想让http强制跳转到https,把里面的http换成https就行。
关键词: vps linux nginx