NginX:设置多个重定向

Posted

技术标签:

【中文标题】NginX:设置多个重定向【英文标题】:NginX: Setting multiple redirects 【发布时间】:2015-03-14 12:03:33 【问题描述】:

我正在尝试将一系列域重定向聚合成一个更简单的解决方案。理想情况下,自 they aren't recommended 以来没有 if 条件。

由于服务器访问限制,我只能编辑 server 块,因此解决方案应考虑此限制。

以下是我目前的一套规则:

server 

  # 301 Redirect domainA.com to www.primaryDomain.com
  if ($host = "domainA.com") 
    rewrite ^ $scheme://www.primaryDomain.com$uri permanent;
  

  # 301 Redirect www.domainA.com to www.primaryDomain.com
  if ($host = "www.domainA.com") 
    rewrite ^ $scheme://www.primaryDomain.com$uri permanent;
  

  # 301 Redirect domainB.com to www.primaryDomain.com
  if ($host = "domainB.com") 
    rewrite ^ $scheme://www.primaryDomain.com$uri permanent;
  

  # 301 Redirect www.domainB.com to www.primaryDomain.com
  if ($host = "www.domainB.com") 
    rewrite ^ $scheme://www.primaryDomain.com$uri permanent;
  

  # 301 Redirect primaryDomain.com to www.primaryDomain.com
  if ($host = "primaryDomain.com") 
    rewrite ^ $scheme://www.primaryDomain.com$uri permanent;
  

  # 301 Redirect http to https
  if ($scheme = http) 
    rewrite ^ https://$host$uri;
  

  ...


我也尝试过基于类似question 的以下解决方案,但 https 重定向似乎不起作用:

server 

  listen 80 default_server;
  listen 443 default_server ssl;
  server_name *.domainA.com *.domainB.com *.primaryDomain.com;
  return 301 https://www.primaryDomain.com$request_uri;


【问题讨论】:

【参考方案1】:

这是我能想到的最佳解决方案:[1]

server 

  set $redirect false;
  if ($scheme = http) 
    set $redirect true;
  
  if ($host != "www.primaryDomain.com") 
    set $redirect true;
  
  if ($redirect = true) 
    return 301 https://www.primaryDomain.com$request_uri;
  


[1] 感谢迈克·谢尔

【讨论】:

以上是关于NginX:设置多个重定向的主要内容,如果未能解决你的问题,请参考以下文章

ngin配置301重定向设置方法和nginx子目录301重定向

如何在 nginx 服务器上做 301 重定向

Nginx RegEx 对多个站点进行重写或内部重定向循环

Nginx 配置旧域名重定向到新域名

https设置后Nginx重定向到默认欢迎页面

宝塔的nginx开启强制https老是无限重定向