การควบคุมการเปลี่ยนเส้นทางด้วย mod_rewrite
ใน Apache
หากคุณกำลังจัดการเว็บไซต์ที่ต้องการเปลี่ยนเส้นทางการจราจรจากโดเมนหนึ่งไปยังอีกโดเมนหนึ่งในขณะที่ยังคงให้การเข้าถึงเส้นทางบางอย่าง mod_rewrite
ใน Apache สามารถเป็นเพื่อนที่ดีที่สุดของคุณ ในโพสต์นี้ เราจะพูดถึงวิธีการเปลี่ยนเส้นทางคำขอทั้งหมด ยกเว้นเส้นทางเฉพาะหนึ่ง เช่น /audio
โดยใช้ mod_rewrite
ปัญหา
เว็บมาสเตอร์หลายคนพบว่าตนเองอยู่ในสถานการณ์ที่ต้องเปลี่ยนเส้นทางการจราจรไปยังโดเมนใหม่แต่ต้องการอนุญาตให้คำขอบางอย่างไปโดยไม่ถูกเปลี่ยนแปลง ตัวอย่างเช่น หากคุณกำลังเปลี่ยนจาก mydomain.example
ไปยัง newdomain.example
และคุณต้องการให้การจราจรทั้งหมดถูกเปลี่ยนเส้นทาง ยกเว้นคำขอสำหรับ /audio
นั่นคือจุดที่ mod_rewrite
มีประโยชน์
ปัญหาเกี่ยวกับไวยากรณ์ทั่วไป
ความพยายามเดิมของผู้ใช้ในการตั้งค่าการเปลี่ยนเส้นทางรวมถึงการใช้ที่ซับซ้อนของนิพจน์ปกติและเงื่อนไขขั้นสูง แม้ว่าความตั้งใจจะถูกต้อง แต่การใช้ HTTP_HOST
ใน RewriteCond
นั้นไม่ถูกต้องเพราะไม่รวมเส้นทางคำขอ
การแก้ปัญหา
เพื่อให้ได้การเปลี่ยนเส้นทางตามที่ต้องการ ขณะเดียวกันก็อนุญาตให้เข้าถึงเส้นทาง /audio
การตั้งค่า Apache ของคุณควรปรับดังนี้:
การตั้งค่าแบบทีละขั้นตอน
-
เปิดใช้งาน Rewrite Engine: ก่อนอื่นให้แน่ใจว่าเปิดใช้งาน rewrite engine แล้ว
RewriteEngine on
-
ตั้งค่าเงื่อนไข: ใช้ตัวแปร
REQUEST_URI
เพื่อตรวจสอบว่าคำขอไม่ใช่สำหรับเส้นทาง/audio
RewriteCond %{REQUEST_URI} !^/audio
-
กำหนดกฎการเขียนใหม่: สร้างกฎที่จัดการการเปลี่ยนเส้นทางไปยังโดเมนใหม่
RewriteRule ^(.*)$ http://www.newdomain.example [L,R=301]
รวบรวมทั้งหมดเข้าด้วยกัน
ในการกำหนดค่า VirtualHost
ของคุณ ควรมีลักษณะดังนี้:
<VirtualHost *:80>
ServerAdmin me@mydomain.example
DocumentRoot "/var/www/mydomain.example/htdocs"
ServerName www.mydomain.example
ServerAlias mydomain.example
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/audio
RewriteRule ^(.*)$ http://www.newdomain.example [L,R=301]
RewriteLog /path/to/log/file
RewriteLogLevel 3
ErrorLog logs/error_log
CustomLog logs/access_log common
</VirtualHost>
การแก้ปัญหาการตั้งค่าของคุณ
หากคุณยังคงพบปัญหาหลังจากตั้งค่านี้ ให้พิจารณาเปิดใช้งานการบันทึกเพื่อตรวจสอบเงื่อนไขและกฎในการทำงาน:
- ใช้
RewriteLog
เพื่อตั้งค่าชื่อไฟล์บันทึกและตั้งค่าระดับการบันทึกให้สูงพอที่จะบันทึกรายละเอียดที่เกี่ยวข้อง
RewriteLog /path/to/log/file
RewriteLogLevel 3
เข้าใจบันทึก
เมื่อคุณตรวจสอบบันทึกหลังจากทำตามกฎข้างต้น ตรวจสอบให้แน่ใจว่าคำขอไปที่ /audio
ไม่ ตรงกับกฎการเขียนใหม่
สรุป
การตั้งค่าการเปลี่ยนเส้นทาง URL โดยใช้ mod_rewrite
เป็นวิธีที่ทรงพลังในการจัดการการจราจรในขณะที่ยังคงให้เส้นทางเฉพาะเข้าถึงได้ โดยมุ่งเน้นไปที่การกำหนดค่าที่ถูกต้องและเข้าใจพฤติกรรมของ REQUEST_URI
คุณสามารถแก้ไขปัญหาเกี่ยวกับการเปลี่ยนเส้นทางที่ไม่ต้องการได้อย่างมีประสิทธิภาพ
ด้วยคำแนะนำนี้ คุณจึงพร้อมที่จะจัดการการเปลี่ยนเส้นทาง URL ใน Apache อย่างมั่นใจ ขอให้สนุกกับการเขียนโค้ด!