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?

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;
  }
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.