น้อมรำลึกในพระมหากรุณาธิคุณ และร่วมถวายความอาลัย สมเด็จพระนางเจ้าสิริกิติ์ พระบรมราชินีนาถ พระบรมราชชนนีพันปีหลวง เสด็จสวรรคต ด้วยสำนึกในพระมหากรุณาธิคุณหาที่สุดมิได้
075-845-490 | 097-165-2449
Line ID: @hostnakhonitech
🎉 โปรโมชั่นพิเศษ! ลด 10% สำหรับลูกค้าใหม่
NakhoniTech
075-845-490
support@NakhoniTech.com

การตั้งค่า Custom 404 Page ด้วย CodeIgniter 4 (CI4) บน DirectAdmin + OpenLiteSpeed Print

  • 0

การตั้งค่า 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


Was this answer helpful?

« Back