11 votes

nginx : réécrire tout sauf un emplacement

Actuellement, mon nginx réécrit plusieurs domaines vers un domaine principal que nous utilisons. Voici une règle de ma configuration :

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

Chaque requête vers **exampleblog.org* est redirigée vers blog.example.org

Maintenant, je veux www.exampleblog.org/+ y exempleblog.org/+ pour rediriger 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;
}

La version ci-dessus et les autres versions redirigent simplement vers blog.exemple.org/+ - qu'est-ce que je fais mal ?

15voto

kolbyjack Points 7644

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

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X