nginx: เขียนทั้งหมดยกเว้นที่เดียว


11

ตอนนี้ nginx ของฉันกำลังเขียนหลายโดเมนไปยังโดเมนหลักเดียวที่เราใช้อยู่ นี่คือหนึ่งกฎจากการกำหนดค่าของฉัน:

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

ทุกคำขอไปยัง ** exampleblog.org * จะถูกเปลี่ยนเส้นทางไปยัง blog.example.org

ตอนนี้ฉันต้องการwww.exampleblog.org/+และexampleblog.org/+เพื่อเปลี่ยนเส้นทางผู้ใช้ไปยังหน้า Google Plus ของเรา ลองรุ่นต่าง ๆ ของ:

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

รุ่นด้านบนและรุ่นอื่น ๆ เพียงแค่เปลี่ยนเส้นทางไปที่blog.example.org/+ - ฉันทำอะไรผิด

คำตอบ:


14

คำสั่งใน nginx ไม่จำเป็นต้องใช้ตามลำดับที่ปรากฏในไฟล์กำหนดค่า การเขียนซ้ำระดับเซิร์ฟเวอร์จะทำหน้าที่ก่อนที่จะมีการเลือกตำแหน่งและจะจับคู่เสมอดังนั้นมันจะเปลี่ยนเส้นทางทุกอย่าง คุณต้องการตำแหน่งที่สองดังนี้:

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;
  }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.