02 พฤษภาคม, 2557

.htaccess ใช้งานไม่ได้ ขึ้นแต่คำว่า "No input file specified."

เมื่อวันก่อนเจ้าของบล๊อกได้ทำการย้ายไฟล์จาก host ตัวเก่าไปยัง host ตัวใหม่อีกตัว
ซึ่งปกติแล้วเว็บที่เราใช้ก็เป็น framework ตัวหนึ่งที่โมฯ ขึ้นมาใช้เอง
และแน่นอนว่า framework ส่วนใหญ่มักจะมีการจัดการ url-decoration เพื่อความสวยงามให้

ตัวอย่างเช่น CI หรือ CodeIgniter ก็จะสั่งให้ทุกอย่าง redirect ไปหา index.php แล้วทำการเซ็ตไฟล์ .htaccess ให้ re-write เจ้า index.php ออกไปจาก url เช่น
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
หรือถ้าเป็น Laravel ก็จะเป็น

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
ทีนี้เวลาเราเรียก จาก
www.nainee.com/index.php/view/1234
ก็จะเหลือแค่
www.nainee.com/view/1234
เท่านั้น ดูสวยขึ้นเยอะ!
นับเป็นวิธีการทำให้ url ดูสวยงามเรียกง่ายขึ้นที่นิยมที่สุด

แต่ทว่า...

อย่างที่เกริ่นไปข้างต้น เรากำลังทำการย้าย host อยู่ แน่นอนว่าเมื่อย้ายไปแล้วก็ต้องมานั่งปรับๆ อะไรกันนิดหน่อยตามฟอร์มเพราะเซิร์ฟเวอร์แต่ละตัวมันตั้งค่ามาไม่เหมือนกัน

แต่ผิดที่โค้ดภาษา PHP ยังพอว่าแต่นี่แม้แต่เรียกหน้าเพจยังไม่ขึ้นเลย แจ้งมาแต่คำว่า
No input file specified.
อ้าว เจออย่างนี้เราก็งงน่ะสิ ของเก่าไอ้เจ้า .htaccess มันยังทำงานได้ปกติเลย แล้วนี่มันเกิดอะไรขึ้น?
คือบอกก่อนว่า .htaccess ที่เขียนน่ะมันไม่ผิดชัวร์ เพราะที่ host เก่ามันทำการ re-write ได้ไม่เห็นมีปัญหา

แล้วแก้ยังไงล่ะ?

ทางแก้นั้นไม่ยากเลย แต่ใช้เวลาหานานมาก นั่นคือ...
เพิ่ม ? ลงไปข้างหลัง path ที่เราจะให้ re-write ไปหา
เช่น
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php?/$1 [L]
เพียงเท่านั้นแหละ .htaccess ก็จะกลับมาใช้งานได้เหมือนเดิม
จบ!

ไม่มีความคิดเห็น:

แสดงความคิดเห็น