ปัญหาการ redirect หน้าเมื่อมีการส่งสถานะ 404 ด้วย php header

ปัญหานี้เกิดขึ้นกับเว็บที่ใช้ GCMS ครับ ลักษณะของปัญหาคือ เมื่อมีการส่งสถานะ 404 ออกมา ในกรณ๊ที่ไม่สามารถเรียกหน้าเว็บไซต์ได้ (ไม่ว่าด้วยสาเหตุใดก็ตาม เช่น ไม่พบโมดูล หรือ ไม่มีสิทธิ) ตัว GCMS จะคืนค่าสถานะของ Server เป็น 404 และแสดงข้อความเตือนที่โมดูล แต่บน Server นี้ (ของลูกค้า) เมื่อมีการส่งสถานะ 404 ออกมา เว็บจะโหลดหน้าแรกมาแสดงผลแทนเสมอ

วิเคราะห์ปัญหา
1. เมื่อไม่พบหน้า หรือไม่มีสิทธิ์ GCMS จะส่งสถานะ 404 ออกมา
2. Server ทำการ redirect ไปยังหน้า 404 ของ Server เอง
3. เมื่อพบสถานะ 404 .htaccess จะทำการรีไดเร็คไปยังหน้า index ของ GCMS
นั่นเป็นขั้นตอนที่เกิดขึ้นเมื่อ GCMS ส่งสถานะ 404 ออกมา
หมายเหตุ จากการทดสอบ พบว่าหากมีการส่งสถานะที่ไม่ใช่ 200 ออกมา Server จะทำการ redirect ไปแสดงหน้า error เสมอ (เป็นหน้า error ของระบบนะครับ) เช่น error 403 ก็จะ redirect ไปแสดง 403.html
จากการวิเคราะห์ปัญหาข้างต้น ผมค่อนข้างมั่นใจว่าปัญหาเกิดขึ้นจาก Server (redirect) แต่ไม่รู้ว่าจุดไหน nginx หรือ apache ผมเลยส่งเรื่องกลับไปให้เจ้าของ Server จัด

ใช้เวลาหมดไป 1 วันกับการตรวจสอบ ได้รับแจ้งผล (เป็นเรื่องที่ยอดเยี่ยมมากที่ลูกค้า ส่งผลการดำเนินการกลับมา) ตามนี้ครับ

ปัญหาเกิดขึ้นจากการตั้งค่า ProxyErrorOverride ของ Apache เป็น on ไว้ ให้เปลี่ยนเป็น off เท่านั้น ที่ไฟล์ /etc/httpd/conf/extra/httpd-default.conf
ProxyErrorOverride off
https://httpd.apache.org/...l#ProxyErrorOverride

ข้อมูล Server ที่พบปัญหา
directadmin + debian 64bit
ซึ่งลูกค้าแจ้งว่าเป็นค่า default ของ directadmin นะครับ (อันนี้ผมไม่มั่นใจ เพราะอาการนี้ผมเพิ่งพบเป็นครั้งแรก)
ผู้เขียน Goragod โพสต์เมื่อ 14 มี.ค. 2561 เปิดดู 408 ป้ายกำกับ .htaccessApachePHP

เรื่องที่เกี่ยวข้อง

^