How to make assets folder works on CodeIgniter

 

สวัสดีครับ วันนี้มีเรื่องเกี่ยวกับ Codeigniter มาแชร์ เกี่ยวกับการเริ่มต้นสร้างโปรเจคด้วย CodeIgniter แล้วมีปัญหาในการทำพวก folder image, css, js หรือไฟล์พวก static ต่างๆครับ ว่าไม่รู้จะเอาไปวางไว้ตรงไหนดี หรือสร้างโฟลเดอร์เองแล้ว แต่ browse ไฟล์ไม่เจอ มาลองดูวิธีนี้กันครับ

ปกติแล้วเราจะสร้างโฟลเดอร์สำหรับ stitic ไฟล์ตามนี้ครับ (ทางเว็บ Codeigniter เค้าบอกมา)

Folder Structure

assets/
—css/
—image/
—js/
—modules/
——modulename/
———css/
———image/
———js/
——modulename2/
———css/
———image/
———js/

นั่นคือโฟลเดอร์ assets จะอยู่ในเลเวลเดียวกันกับ application และ system เพื่อไม่ให้เป็นการผิดมาตรฐาน เราก็ทำตามเค้าไปเลยแบบไม่ต้องสงสัยครับ แต่เมื่อเราลองเอาไฟล์เข้าไปวางแล้ว ปรากฎว่า 404 File Not Found ซะอย่างนั้น

นั่นเป็นเพราะเราต้องเซ็ต .htaccess ให้ถูกต้องครับ กระทั่งตอนที่ Codeigniter บอกให้เราสร้าง .htaccess ก็ยังบอกมาไม่ได้ครอบคลุมถึงกรณี static file ครับ (กรณีที่สร้าง .htaccess ให้สร้างในเลเวลเดียวกันกับ application และ system ครับ)

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

จะเห็นว่า ถ้าเราต้องการจะใส่ไฟล์ภาพ ให้ใส่ในโฟลเดอร์ images เท่านั้น ที่ถูกต้อง และควรจะเป็น คือเราจะมีไฟล์พวก .js .css และอื่นๆอีก จะให้ไว้ใน images ก็ดูไม่ถูกต้อง จึงต้องแก้ไข .htaccess ตามนี้ครับ

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt|assets)
RewriteRule ^(.*)$ /index.php/$1 [L]

โดยเพิ่ม assets ตามนั้นครับ เราก็จะสามารถ browse ไฟล์ด้วย path แบบนี้ได้ครับ

http://www.test.com/assets/image/image1.jpg

เพียงเท่านี้เราก็สามารถนำพวก static ไฟล์ไปใส่ไว้ในโฟลเดอร์ได้ตามที่ต้องการแล้วครับ

ถ้า .htaccess ที่ให้ไว้ข้างตนไม่สามารถใช้งานได้ ลองใช้อันนี้ดูครับ

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|images|robots\.txt|assets)
RewriteRule ^(.*)$ index.php?/$1 [L]

หวังเป็นอย่างยิ่งว่าบทความนี้จะเป็นประโยชน์ไม่มากก็น้อยนะครับ