Oriol
Oriol

Reputation: 12650

NginX: Setting multiple redirects

I'm trying to aggregate a series of domain redirects into a simplier solution. Ideally without the if conditions since they aren't recommended.

Due to server access restrictions I can only edit the server{} block, so the solution should consider this restriction.

Below is my current set of rules:

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;
  }

  ...

}

I have also tried the following solution based on a similar question but the https redirect doesn't seem to work:

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;

}

Upvotes: 0

Views: 2083

Answers (1)

Oriol
Oriol

Reputation: 12650

This is the best solution I was able to come up with: [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] Thanks to Mike Schell

Upvotes: 1

Related Questions