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?

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;
  }
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.