วิธีการใช้ mod_rewrite
อย่างมีประสิทธิภาพเพื่อโหลดไฟล์ที่อยู่เบื้องหลัง DocumentRoot ใน Apache
เมื่อทำงานกับเซิร์ฟเวอร์เว็บ Apache คุณอาจจะเจอสถานการณ์ที่ต้องให้บริการไฟล์ที่อยู่ภายนอกไดเรกทอรี DocumentRoot สิ่งนี้อาจจะยุ่งยากและอาจนำไปสู่ข้อผิดพลาดที่น่าผิดหวัง เช่น “ไม่พบ URL ที่ร้องขอบนเซิร์ฟเวอร์นี้” ในบล็อกโพสต์นี้เราจะสำรวจวิธีการตั้งค่าไฟล์ .htaccess
และ mod_rewrite
เพื่อโหลดไฟล์ที่อยู่เบื้องหลัง DocumentRoot อย่างถูกต้อง
ทำความเข้าใจกับปัญหา
ลองพิจารณาโครงสร้างโฟลเดอร์ดังต่อไปนี้:
home/
webroot/
other_files/
สมมุติว่าคุณมีไฟล์ .htaccess
ในไดเรกทอรี webroot
ที่บรรจุด้วยโค้ดนี้:
RewriteEngine on
RewriteRule ^(.*)$ /home/other_files/$1
หากคุณพยายามเข้าถึง http://example.com/file.html คุณอาจเห็นข้อผิดพลาดเช่น:
ไม่พบ URL ที่ร้องขอ /home/other_files/file.html บนเซิร์ฟเวอร์นี้
ข้อผิดพลาดนี้แสดงว่า Apache ไม่รู้ว่าจะให้บริการไฟล์ที่ตั้งอยู่ในโฟลเดอร์ other_files
ได้อย่างไร เนื่องจากอยู่ภายนอก DocumentRoot ที่กำหนด
วิธีแก้ปัญหา
เพื่อโหลดไฟล์ที่อยู่เบื้องหลัง DocumentRoot อย่างถูกต้องโดยใช้ .htaccess
และ mod_rewrite
คุณจะต้องทำการเปลี่ยนแปลงการตั้งค่าเซิร์ฟเวอร์บางอย่าง ลองแยกขั้นตอนนี้ออกเป็นขั้นตอนที่ชัดเจน
ขั้นตอนที่ 1: กำหนดค่าเซิร์ฟเวอร์ Apache
เพื่ออนุญาตให้ Apache ให้บริการไฟล์จากไดเรกทอรี other_files
คุณจะต้องเพิ่มบล็อกการกำหนดค่าในการตั้งค่าเซิร์ฟเวอร์ โดยทั่วไปแล้วจะทำในไฟล์การกำหนดค่า Apache (ไม่ใช่ในไฟล์ .htaccess
) นี่คือวิธีการ:
<Directory "/home/other_files">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
คำอธิบายการกำหนดค่า:
Options
: ควบคุมตัวเลือกสำหรับไดเรกทอรี (เช่นการเปิดใช้งานการดัชนี)AllowOverride
: กำหนดว่าไดเรกทีฟใดสามารถถูกแทนที่โดย.htaccess
Order
: กำหนดลำดับการควบคุมการเข้าถึง (ห้ามก่อน แล้วค่อยอนุญาต)Deny/Allow
: กำหนดว่า IP ใดบ้างที่อนุญาตให้เข้าถึงไดเรกทอรีนี้
ขั้นตอนที่ 2: ใช้คำสั่ง Alias (ไม่บังคับ)
หากคุณไม่ต้องการกำหนดค่า Apache โดยตรงเพื่อเปิดเผยไดเรกทอรี other_files
คุณสามารถสร้าง Alias ที่แมพ URL ไปยังตำแหน่งจริงของไฟล์ได้ นี่คือลักษณะที่อาจเป็นไปได้:
Alias /doc/ "/home/other_files/"
<Directory "/home/other_files/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
โดยการใช้ Alias ตอนนี้คุณสามารถเขียน URL เช่น /doc/file.html
เพื่อดึงไฟล์จากไดเรกทอรี other_files
ขั้นตอนที่ 3: เริ่มเซิร์ฟเวอร์ Apache ใหม่
เมื่อคุณทำการเปลี่ยนแปลงการกำหนดค่า Apache เหล่านี้แล้ว อย่าลืมรีสตาร์ทเซิร์ฟเวอร์เพื่อให้การตั้งค่าใหม่มีผล:
sudo service apache2 restart
สรุป
การให้บริการไฟล์จากไดเรกทอรีภายนอก DocumentRoot ใน Apache เป็นไปได้อย่างแน่นอนและสามารถทำได้ด้วยการกำหนดค่าที่ถูกต้อง โดยการตั้งค่าคำสั่งให้ถูกต้องในการกำหนดค่าเซิร์ฟเวอร์ Apache หรือการใช้ Alias คุณสามารถมั่นใจได้ว่า .htaccess
ของคุณจะสามารถทำงานได้อย่างมีประสิทธิภาพ
หากคุณยังมีปัญหาอยู่ให้ตรวจสอบการกำหนดค่าของคุณอีกครั้ง และไม่ลังเลที่จะหาข้อมูลเพิ่มเติมจากเอกสารประกอบการใช้งานอย่างเป็นทางการของ Apache Documentation สำหรับรายละเอียดเพิ่มเติม
โดยทำตามขั้นตอนเหล่านี้ คุณจะสามารถใช้ศักยภาพของ mod_rewrite
ในขณะที่จัดการตำแหน่งไฟล์ภายในการตั้งค่าเซิร์ฟเวอร์ Apache ของคุณได้อย่างสำเร็จ!