Apache แจ้ง Error "no acceptable variant"

ปัญหานี้เกิดจากการเรียกไปยัง URL ที่ไม่มีนามสกุลของไฟล์และไม่พบไฟล์ที่เรียก เช่น เรียกไปยังไฟล์ /some/dir/index แต่ไม่พบไฟล์ index และ index ไม่ใช่ไดเร็คทอรี่ ทำให้ Apache ไม่รู้จะเอาไฟล์ไหนมาประมวลผล

วิธีการแก้ไข
ที่ถูกต้องคือให้หลีกเลี่ยงการเรียกไปยัง URL ดังกล่าว เพราะ Apache อาจมอง URL ดังกล่าวเป็นไฟล์หรือไดเร็คทอรี่ก็ได้ เช่น /some/dir/index (ไฟล์ index ในไดเรคทอรี่ /some/dir/) หรือ /some/dir/index/index.php หากมีไฟล์ index.php อยู่ในไดเร็คทอรี่ /some/dir/index/ (index เป็นไดเร็คทอรี่)

แต่หากจำเป็นต้องใช้งาน URL ลักษณะนี้สามารถเปิดใช้งาน MultiViews ของ Apache ได้ โดยให้ใส่คำสั่งนี้ลงในไฟล์ Apache config
<Files "*.php">
  MultiviewsMatch Any
</Files>

เมื่อมีการเปิดให้ใช้งาน MultiViews หากมีการ request มาที่ /some/dir/index Apache จะทำการค้นหา /some/dir/index.* (ไฟล์นามสกุลใดๆก็ได้) เพื่อนำไปประมวลผล ยกตัวอย่างเช่น ขอ /some/dir/index มา แต่มี index.txt อยู่และไม่มี index.php ก็จะเอา index.txt ไปทำงานเหมือนเป็น index.php แทน
การเปิดใช้งานตัวเลือกนี้ ถ้าไม่จำเป็นก็ไม่ควรเปิดใช้นะครับ เนื่องจากเป็นคำสั่งที่ค่อนข้างอันตรายเนื่องจาก Apache จะทำการประมวลผลไฟล์นามสกุลใดๆก็ได้ที่เจอ (เช่นไฟล์ text หรือ ไฟล์รูปภาพ) ซึ่งอาจเป็นสาเหตุให้ถูกโจมตีได้
ผู้เขียน goragod โพสต์เมื่อ 07 ม.ค. 2560 เปิดดู 2,855 ป้ายกำกับ Apache
^