nginx: tout réécrire sauf un emplacement

11

En ce moment, mon nginx réécrit plusieurs domaines dans un domaine principal que nous utilisons. Voici une règle de ma config:

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

Chaque demande à ** exampleblog.org * est redirigée vers blog.example.org

Maintenant, je veux que www.exampleblog.org/+ et exampleblog.org/+ redirigent l'utilisateur vers notre page Google Plus. Il a essayé différentes versions de:

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

Ci-dessus et les autres versions redirigent simplement vers blog.example.org/+ - qu'est-ce que je fais mal?

lorem singe
la source

Réponses:

14

Les directives dans nginx ne s'appliquent pas nécessairement dans l'ordre dans lequel elles apparaissent dans le fichier de configuration. La réécriture au niveau du serveur agit avant qu'un emplacement ne soit sélectionné, et elle correspond toujours, donc elle redirigera tout. Vous avez besoin d'un deuxième emplacement comme celui-ci:

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
la source