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

Redirect 如何使用NGINX重定向到其他域?,redirect,nginx,vhosts,Redirect,Nginx,Vhosts,我如何使用NGINX将mydomain.com和任何子域*.mydomain.com重定向到www.adiffertdomain.com 这应该可以通过 将示例从www.Example.com改写为Example.com: server { server_name www.example.com; rewrite ^ http://example.com$request_uri? permanent; } 使用.mydomain.com语法支持后缀匹配: se

我如何使用NGINX将
mydomain.com
和任何子域
*.mydomain.com
重定向到
www.adiffertdomain.com

这应该可以通过

将示例从www.Example.com改写为Example.com:

server {    
    server_name www.example.com;    
    rewrite ^ http://example.com$request_uri? permanent; 
}
使用.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;
}

如果可以执行
返回
,为什么要使用“重写”模块?从技术上讲,
return
是重写模块的一部分,但这段代码更容易阅读

server {
    server_name  .domain.com;

    return 302 $scheme://forwarded-domain.com;
}
你也可以给它一个301重定向

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


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

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

临时重定向

rewrite ^ http://www.RedirectToThisDomain.com$request_uri? redirect;
rewrite ^ http://www.RedirectToThisDomain.com$request_uri? permanent;
永久重定向

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;

}

您只需在服务器{}块内编写一个if条件:

server { 

    if ($host = mydomain.com) {
        return 301 http://www.adifferentdomain.com;
    } 
}

我正在为我的网站使用此代码

server {
        listen 80;
        listen 443;
        server_name  .domain.com;

        return 301 $scheme://newdomain.com$request_uri;
}


这只是将www.example.com重定向到example.com。我想将两者重定向到不同的域。我能用一条规则做到这一点吗?我不确定,但我认为服务器名为mydomain.com;重写www.adiffertdomain.com永久;}应该这样做吗?这应该包括一切*.mydomain.com?@deb您只需要
server\u name example.com www.example.com。该问题特别要求任何子域重定向到其他域。这两个答案都没有(明确地)答案。这缺少了重要的301!我不需要输入一个端口来监听吗?e、 听80。我有多个域需要重定向到主域,但我的服务器也有多个虚拟服务器用于各种其他域。@Ryan未指定时,
listen
指令默认为端口80。它实际上比一般情况要复杂一点;有关更多详细信息,请参阅。最后的
实现了什么?重写
和返回301之间的区别是什么$scheme://www.adifferentdomain.com$request_uri?是什么?重写结束时,通知nginx不要附加原始查询字符串。由于
$request\u uri
已经具有查询字符串,因此无需再次追加它。
return 301
语法较新,两种方法的行为应该没有区别,但是当我最初回答这个问题时,许多发行版没有所需的版本,所以我使用了更安全的语法。这会保留路径和查询参数吗?不,这个示例没有@Mark。但是我想你可以把前面的答案混合起来,得出如下的结果:
return302$scheme://forwarded-domain.com$request_uri
另一方面,在许多情况下,您可能应该重定向到https,而不是保留方案(即使用https而不是$scheme)。这与协议相关链接现在被视为不推荐使用的原因相同-@mahemoff这并不完全正确。考虑将Web服务器放在卸载SSL的负载均衡器后面的情况。有人可能需要重定向HTTPS://请求也。代码>听443在Nginx()上使用“if”语句时需要小心。在这种情况下,您可以只使用“server\u name mydomain.com”来代替。如果在位置上下文中使用“server\u name mydomain.com”是邪恶的,则在用于指定重定向主机时是安全的