nginx: riscrivi tutto tranne una posizione


11

In questo momento il mio nginx sta riscrivendo diversi domini in un dominio principale che stiamo utilizzando. Ecco una regola dalla mia configurazione:

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

Ogni richiesta a ** exampleblog.org * viene reindirizzata a blog.example.org

Ora voglio www.exampleblog.org/+ e exampleblog.org/+ per reindirizzare l'utente alla nostra pagina Google Plus. Ha provato diverse versioni di:

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

Sopra e altre versioni reindirizzare a blog.example.org/+ - cosa sto facendo di sbagliato?

Risposte:


14

Le direttive in nginx non si applicano necessariamente nell'ordine in cui appaiono nel file di configurazione. La riscrittura a livello di server agisce prima che venga selezionata una posizione e corrisponde sempre, quindi reindirizzerà tutto. È necessaria una seconda posizione in questo modo:

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;
  }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.