nginx: tulis ulang semua kecuali satu lokasi

11

Saat ini nginx saya sedang menulis ulang beberapa domain menjadi satu domain utama yang kami gunakan. Berikut ini satu aturan dari konfigurasi saya:

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

Setiap permintaan ke ** exampleblog.org * dialihkan ke blog.example.org

Sekarang saya ingin www.exampleblog.org/+ dan exampleblog.org/+ untuk mengarahkan pengguna ke halaman Google Plus kami. Itu mencoba berbagai versi:

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

Di atas dan versi lain hanya mengarahkan ke blog.example.org/+ - apa yang saya lakukan salah?

monyet lorem
sumber

Jawaban:

14

Arahan di nginx tidak selalu berlaku sesuai urutan yang muncul di file konfigurasi. Penulisan ulang tingkat server bertindak sebelum lokasi dipilih, dan itu selalu cocok, sehingga akan mengarahkan ulang semuanya. Anda memerlukan lokasi kedua seperti:

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
sumber