พื้นหลังเสริม (เพื่อหลีกเลี่ยงปัญหา XY): ฉันกำลังทำงานกับไซต์คงที่ซึ่งจะมี URL เช่น www.example.com/ksiÄ Å¼ka/. ปัญหาของ URL เหล่านั้นคือเมื่อคุณแชร์ / วางในโปรแกรม IM ฯลฯ อักขระกำกับเสียงจะถูกขยายเป็น %<ฐานสิบหก> และอ่านไม่ออก: www.example.com/ksi%C4%85%C5%BCka/. ดังนั้นฉันกำลังพิจารณาสิ่งต่อไปนี้:
- ตั้งค่า Canonical URL ของหน้าเป็น
www.example.com/ksiazka/ ("Ä Å¼" แทนที่ด้วย "az")
- ส่งคืนการเปลี่ยนเส้นทางชั่วคราว (HTTP 302 หรือ 307) ไปยัง
www.example.com/ksiÄ Å¼ka/.
สิ่งที่ไม่ได้ผล:
การเขียนที่อยู่ใหม่โดยอัตโนมัติ เหตุผล: เราจะไม่เปลี่ยนจาก "Ä Å¼" เป็น "az" แต่จาก "az" เป็น "Ä Å¼" หรืออาจจะเป็น "Ä z" หรือ "aż" หรือ "áz" หรือหนึ่งในหลายๆ ความเป็นไปได้อื่นๆ การเปลี่ยนเส้นทางต้องสร้างขึ้นระหว่างการสร้างเพจ เมื่อเราทราบรายการทั้งหมดของเพจที่มีอยู่ และเรารู้ว่า "ksiazka" ควรเปลี่ยนเส้นทางไปที่ "ksiÄ Å¼ka" ไม่ใช่ "ksiÄ Å¼kÄ "
ฉันต้องกำหนดค่าการเปลี่ยนเส้นทาง HTTP 1 รายการต่อหน้า ฉันจะต้องมีการเปลี่ยนเส้นทาง HTTP ใหม่ทุกครั้งที่อัปโหลดบทความใหม่
การแก้ไขการกำหนดค่า NGINX จำเป็นต้องเข้าถึงรูท และฉันกำลังปรับใช้ไซต์ภายใต้การอนุญาตของผู้ใช้ทั่วไป ภายใต้ Apache คุณสามารถเพิ่มคำสั่งบางอย่างได้ .htaccessแต่นี่เป็นปัญหาสำหรับประสิทธิภาพและ NGINX ไม่จำเป็น
บาร์ที่ฉันสามารถสร้างการรวมใน /etc/nginx/sites-available/mysite เพื่อดึงเนื้อหาของ /home/myuser/mysite/_redirects. ดังนั้นเซิร์ฟเวอร์จะอ่านไฟล์ที่ควบคุมโดยผู้ใช้ทั่วไป ข้อเสียคือมันจะให้สิทธิ์ผู้ใช้ทั่วไปในการเข้าถึงตัวเลือกการกำหนดค่า NGINX ทั้งหมด ในขณะที่ฉันต้องตั้งค่าการเปลี่ยนเส้นทางเท่านั้น
เพื่อหลีกเลี่ยงปัญหานี้ ฉันอาจเขียนชิ้นส่วนของระบบอัตโนมัติที่อ่านไฟล์ที่ผู้ใช้อัปโหลด ซึ่งมีเฉพาะข้อมูลที่จำเป็นสำหรับการเปลี่ยนเส้นทางเท่านั้น บางอย่างเช่น _redirects ไฟล์ใน Netlify แต่นี่รู้สึกผิด กำหนดเองมากเกินไป
สรุป:
- เว็บไซต์คงที่
- ต้องใช้ HTTP 302 หรือ HTTP 307
- การอัปเดตบ่อยครั้ง (การแก้ไขด้วยตนเองของ
/etc/nginx เป็นไปไม่ได้)
- ไฟล์ที่อัปโหลดในฐานะผู้ใช้ระบบที่ไม่มีสิทธิพิเศษ
- ไม่ให้ผู้ใช้มีอำนาจเหนือเว็บเซิร์ฟเวอร์มากเกินไป
วิธีที่ดีในการทำเช่นนี้กับ NGINX คืออะไร