Nginx schreibt falsch um

Nginx schreibt falsch um

Aus irgendeinem Grund leitet www.server-1.com/forum nicht auf forum.server-1.com weiter, sondern auf www.server-2.com. Wenn ich den Teil lösche, der von www.server-1.com auf www.server-2.com weiterleitet, funktioniert es wie am Schnürchen... na ja, nicht ganz, da der erste Schrägstrich nach forum dabei irgendwie verloren geht, wenn die URL nicht mit /forum endet, sondern beispielsweise mit /forum/index.php.

# Redirect www.server-1.com/forum to forum.server-1.com
# Redirect www.server-1.com/forum/ to forum.server-1.com
# Redirect www.server-1.com/forums to forum.server-1.com
# Redirect www.server-1.com/forums/ to forum.server-1.com
# Redirect www.server-1.com to www.server-2.com
server {
  listen 80;

  server_name www.server-1.com;

  location = /forum {
    rewrite ^ http://forum.server-1.com redirect;
    break;
  }

  location /forum/ {
    rewrite ^/forum/(.*) http://forum.server-1.com$1 redirect;
    break;
  }

  location = /forums {
    rewrite ^ http://forum.server-1.com redirect;
    break;
  }

  location /forums/ {
    rewrite ^/forums/(.*) http://forum.server-1.com$1 redirect;
    break;
  }

  rewrite ^ http://www.server-2.com redirect;
}

# Redirect forum.server-1.com to www.server-3.com/forum (where the forum is hosted)
server {
  listen 80;

  server_name forum.server-1.com;

  rewrite ^(.*) http://www.server-3.com/forum$1 redirect;
}

# Redirect forums.server-1.com to forum.server-1.com
server {
  listen 80;

  server_name forums.server-1.com;

  rewrite ^(.*) http://forum.server-1.com$1 redirect;
}

# Redirect server-1.com and *server-1.com to www.server-1.com
server {
  listen 80;

  server_name server-1.com *.server-1.com;

  rewrite ^(.*) http://www.server-1.com$1 redirect;
}

Antwort1

nginx verarbeitet Anweisungen nicht unbedingt in der Reihenfolge, in der sie in der Konfigurationsdatei erscheinen. Anweisungen zum Umschreiben auf Serverebene werden vor der Standortauswahl verarbeitet, was das beobachtete Verhalten erklärt. Da alles auf dem Server nur umgeschrieben wird, sollten Sie Folgendes verwenden können:

server {
  server_name www.server-1.com;

  rewrite ^/forums?(.*) http://forum.server-1.com$1 redirect;
  return 302 http://www.server-2.com/;
}

verwandte Informationen