การตั้งค่า Custom 404 Page ด้วย CodeIgniter 4 (CI4) บน DirectAdmin + OpenLiteSpeed
เมื่อใช้งาน DirectAdmin ร่วมกับ OpenLiteSpeed Web Server ผู้ดูแลระบบจำนวนมากมักพบปัญหาว่า แม้จะกำหนดหน้า 404 ผ่านไฟล์ .htaccess แล้ว แต่ระบบกลับแสดงหน้า 404 ของ LiteSpeed Web Server แทนหน้าเพจที่ออกแบบเอง
บทความนี้อธิบายแนวทางที่ถูกต้องสำหรับเว็บไซต์ที่พัฒนาด้วย CodeIgniter 4 (CI4) ซึ่งสามารถใช้งานได้จริงและไม่ชนกับระบบของ OpenLiteSpeed
แนวคิดที่ถูกต้องในการจัดการหน้า 404
- OpenLiteSpeed ทำหน้าที่ Rewrite URL เท่านั้น
- ทุก Request ถูกส่งเข้า
index.php - CodeIgniter 4 เป็นผู้จัดการหน้า 404 เอง
วิธีนี้ช่วยให้หน้า 404 ใช้ Layout เดียวกับเว็บไซต์หลัก รองรับ SEO และไม่ถูก LiteSpeed ดึงหน้า Error ของตัวเองมาแสดงแทน
ขั้นตอนที่ 1 : สร้าง Controller สำหรับหน้า 404
สร้างไฟล์
app/Controllers/Errors.php
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
class Errors extends Controller
{
public function show404()
{
return response()
->setStatusCode(404)
->setBody(view('errors/custom_404'));
}
}
Controller นี้ทำหน้าที่แสดงหน้า 404 พร้อมกำหนด HTTP Status Code = 404 อย่างถูกต้อง
ขั้นตอนที่ 2 : สร้าง View หน้า 404
สร้างไฟล์
app/Views/errors/custom_404.php
<?= $this->include('layouts/header') ?>
<section>
<div style="text-align:center">
<h1>404</h1>
<p>ไม่พบหน้าที่คุณต้องการ</p>
<a href="<?= base_url('/') ?>">กลับหน้าแรก</a>
</div>
</section>
<?= $this->include('layouts/footer') ?>
สามารถใช้ Header และ Footer เดียวกับเว็บไซต์หลักได้ เหมาะสำหรับเว็บไซต์ธุรกิจและเว็บโฮสติ้ง
ขั้นตอนที่ 3 : ตั้งค่า Routes ให้ CI4 ใช้หน้า 404 นี้
แก้ไขไฟล์
app/Config/Routes.php
เพิ่มโค้ดไว้ช่วงท้ายไฟล์
$routes->set404Override('Errors::show404');
ตั้งแต่นี้เป็นต้นไป ทุก URL ที่ไม่พบ จะถูกส่งเข้า Controller นี้โดยอัตโนมัติ
ขั้นตอนที่ 4 : ตรวจสอบไฟล์ .htaccess (สำคัญมาก)
ไฟล์ .htaccess ต้องมี Rewrite Rule เพื่อส่ง Request เข้า CodeIgniter 4
ตำแหน่งไฟล์
public_html/.htaccess
<IfModule LiteSpeed>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
หากไม่มี Rewrite ส่วนนี้ OpenLiteSpeed จะดักหน้า 404 เอง และ CI4 จะไม่ถูกเรียกใช้งาน
ข้อควรระวังที่พบบ่อย
- ไม่ควรกำหนด
errorPage 404ใน OpenLiteSpeed Virtual Host - ไม่ควรใช้
ErrorDocument 404แบบ Apache - หน้า 404 ควรถูกจัดการโดย CodeIgniter 4 เท่านั้น
สรุป
การใช้งาน Custom 404 Page บน CodeIgniter 4 เมื่อใช้ร่วมกับ DirectAdmin และ OpenLiteSpeed ควรให้ CI4 เป็นผู้จัดการหน้า Error ทั้งหมด
แนวทางนี้ช่วยให้เว็บไซต์มีความเป็นมืออาชีพ แสดงผลสวยงาม รองรับ SEO และไม่ชนกับระบบของ Web Server