如何使用NGINX重定向到其他域?


136

我如何可以重定向mydomain.com任何子域*.mydomain.com,以www.adifferentdomain.com使用NGINX?

Answers:


276

server_name支持使用.mydomain.com语法进行后缀匹配:

server {
  server_name .mydomain.com;
  rewrite ^ http://www.adifferentdomain.com$request_uri? permanent;
}

或任何0.9.1或更高版本:

server {
  server_name .mydomain.com;
  return 301 http://www.adifferentdomain.com$request_uri;
}

1
我不需要插入端口进行监听吗?例如,听80。我有多个域,我需要将其重定向到主域,但是我的服务器还具有用于其他各个域的多个虚拟服务器。
瑞安

1
@Ryan listen如果未指定,则伪指令默认为端口80。实际上,它比一般情况要复杂一些。有关更多详细信息,请参见nginx配置文档
Yitz 2013年

2
?最后的成就是什么?
Dan Dascalescu 2014年

5
rewrite和之间有什么区别return 301 $scheme://www.adifferentdomain.com$request_uri;
Dan Dascalescu 2014年

6
?重写结束时,告诉nginx不要追加原始查询字符串。由于$request_uri已经有了查询字符串,因此无需再次追加查询字符串。该return 301语法是新的,而且应该在这两种方法之间的行为没有什么区别,但是当我最初回答了这个问题,很多发行没有所需的版本,所以我更安全的语法去了。
kolbyjack 2014年


15

如果可以,为什么要使用重写模块return?从技术上讲,它return是重写模块的一部分,您可以在此处阅读,但是此代码段更易于阅读imho。

server {
    server_name  .domain.com;

    return 302 $scheme://forwarded-domain.com;
}

您也可以给它一个301重定向。


1
这样还会保留路径和查询参数吗?
mpen 2014年

3
不,此示例不执行@Mark操作。但我想您可以将前面的答案混在一起,得出这样的结果:return 302 $scheme://forwarded-domain.com$request_uri;
Robin van Baalen 2015年

附带一提,在许多情况下,您可能应该仅重定向到https而不是保留方案(即,使用https代替$ scheme)。出于同样的原因,现在不建议使用协议相对链接 -paulirish.com/2010/the-protocol-relative-url
mahemoff 2015年

@mahemoff并非完全如此。考虑将Web服务器置于释放ssl的负载均衡器后面的情况。
塞巴斯蒂安·内拉

11

那应该通过HTTPRewriteModule起作用

从www.example.com重写为example.com的示例:

server {    
    server_name www.example.com;    
    rewrite ^ http://example.com$request_uri? permanent; 
}

那只是将www.example.com重定向到example.com。我想将两者都重定向到另一个域。我可以按照一条规则做吗?
deb

我不确定,但我认为server_name mydomain.com; 重写www.adifferentdomain.com永久;}应该这样做吗?那应该占用所有* .mydomain.com吗?
udo

@deb你将拥有server_name example.com www.example.com;
citruspi 2012年

该问题专门要求所有子域重定向到其他域。此答案不能(明确地)回答两个。
Kissaki

这缺少重要的301!
Sliq,

9

如果要将“ domain1.com”的请求重定向到“ domain2.com”,则可以创建一个如下所示的服务器块:

server {
    listen 80;
    server_name domain1.com;
    return 301 $scheme://domain2.com$request_uri;
}

可能还需要重定向https://请求。 listen 443;
拉菲克·法哈德

0

临时重定向

rewrite ^ http://www.RedirectToThisDomain.com$request_uri? redirect;

永久重定向

rewrite ^ http://www.RedirectToThisDomain.com$request_uri? permanent;

在特定站点的nginx配置文件中:

server {    
    server_name www.example.com;
    rewrite ^ http://www.RedictToThisDomain.com$request_uri? redirect;

}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.