ไม่มีวิธีการในตัวเพื่อแยกการตั้งค่าการเขียนใหม่อย่างถูกต้อง มีสามวิธีที่คุณสามารถทำได้
โมดูลแผนที่รวมถึง
โมดูลแผนที่ช่วยให้คุณสามารถที่จะรวมแมปจากแฟ้มที่แยกต่างหาก Nginx ยังคงต้องมีการโหลดซ้ำหลังจากที่ไฟล์มีการเปลี่ยนแปลงและไฟล์การแมปจะต้องถูกต้องทางไวยากรณ์ แต่จะ จำกัด สิ่งที่สามารถทำได้
nginx.conf
:
map $uri $new {
include /etc/nginx/marketing.map;
}
server {
...
if ($new) {
rewrite ^ $new redirect;
}
...
}
marketing.map
:
/about /company/about-us;
~^/people/(?<person>.*)$ /company/people/$person;
การกำหนดค่าล่วงหน้ากระบวนการ
สิ่งแรกคือการเขียนสคริปต์ที่แปลงการเปลี่ยนเส้นทางจากบางรูปแบบที่คุณกำหนดเป็นการกำหนดค่า nginx ตัวอย่างเช่นให้รายการของการเปลี่ยนเส้นทางที่คั่นด้วยพื้นที่
/foo/(.*) /bar/$1
และสคริปต์:
#!/bin/sh
while read SOURCE DEST; do
echo "rewrite $SOURCE $DEST permanent;"
done < redirects.txt > redirects.conf
เพื่อจัดรูปแบบการกำหนดค่าต่อไปนี้:
rewrite /foo/(.*) /bar/$1 permanent;
จากนั้นคุณต้องการเรียกใช้nginx -t
การกำหนดค่าทั้งหมดเพื่อตรวจสอบว่าถูกต้องก่อนที่จะโหลดซ้ำ
การประมวลผลแบบทันทีทันใด
ตัวเลือกที่สองคือการใช้ngx_lua , ngx_perlหรือngx_jsเพื่อดำเนินการอ่านและประมวลผลการกำหนดค่าการเปลี่ยนเส้นทางของคุณใน nginx เอง ตัวอย่างเช่นrewrite_by_lua
คำสั่งอนุญาตให้คุณรันโค้ดLuaเพื่อสร้างการเขียนซ้ำ คุณต้องระมัดระวังเกี่ยวกับ preformance แต่เนื่องจากคุณจะตีความรหัสสำหรับทุกคำขอ