nginx: schreibe alle außer einem Speicherort neu

11

Im Moment schreibt mein Nginx mehrere Domains in eine Hauptdomain um, die wir verwenden. Hier ist eine Regel aus meiner Konfiguration:

server {
  listen X.X.X.X:80;
  server_name .exampleblog.org;
  rewrite ^(.*) http://blog.example.org$1 permanent;
}

Jede Anfrage an ** exampleblog.org * wird an blog.example.org weitergeleitet

Jetzt möchte ich, dass www.exampleblog.org/+ und exampleblog.org/+ den Nutzer auf unsere Google Plus-Seite weiterleiten . Es wurden verschiedene Versionen von:

server {
  listen X.X.X.X:80;
  server_name .exampleblog.org;
  location /+ {
    rewrite ^ https://plus.google.com/12345678901234567890/ permanent;
  }
  rewrite ^(.*) http://blog.example.org$1 permanent;
}

Die oben genannten und andere Versionen leiten einfach zu blog.example.org/+ weiter - was mache ich falsch?

Loremaffe
quelle

Antworten:

14

Anweisungen in nginx gelten nicht unbedingt in der Reihenfolge, in der sie in der Konfigurationsdatei angezeigt werden. Das Umschreiben auf Serverebene wird ausgeführt, bevor ein Speicherort ausgewählt wird, und es stimmt immer überein, sodass alles umgeleitet wird. Sie benötigen einen zweiten Standort wie folgt:

server {
  listen x.x.x.x:80;
  server_name .exampleblog.org;

  # Match /+ requests exactly    
  location = /+ {
    # I prefer return 301 instead of rewrite ^ <target> permanent,
    # but you can use either
    return 301 http://plus.google.com/1234567890/;
  }

  # Match everything else
  location / {
    return 301 http://blog.example.org$request_uri;
  }
}
Kolbyjack
quelle