
Apache Handlers ช่วยกำหนดวิธีที่ Apache Web Server จัดการไฟล์ประเภทต่างๆ เช่น ให้ไฟล์นามสกุล .html ถูกประมวลผลเป็น PHP หรือให้ไฟล์บางประเภทรันเป็น CGI Script
วิธีเพิ่ม Apache Handler
- ล็อกอิน DirectAdmin แล้วไปที่เมนู Advanced Features
- คลิก Apache Handlers
- คลิก Add Handler
- กรอก Handler เช่น
application/x-httpd-php - กรอก Extensions เช่น
.php7 .phtml - คลิก Add
Handler ที่ใช้บ่อย
application/x-httpd-php— ประมวลผลไฟล์เป็น PHPcgi-script— รันไฟล์เป็น CGI Scripttext/html— ให้ Browser แสดงเป็น HTML
ระวัง: การตั้ง Handler ผิดพลาดอาจทำให้ไฟล์ถูกดาวน์โหลดแทนที่จะแสดงในเบราว์เซอร์ หรืออาจรัน Code ที่ไม่ต้องการได้ ตรวจสอบให้แน่ใจก่อนบันทึก
Apache Handler คืออะไรและทำงานอย่างไร
ก่อนจะเพิ่มหรือแก้ไข Apache Handler ใดๆ ควรเข้าใจพื้นฐานว่า Handler ทำงานอย่างไรใน Request Cycle ของ Apache เพื่อให้การตั้งค่าถูกต้องตั้งแต่ต้น
เมื่อ Browser ร้องขอไฟล์จากเว็บเซิร์ฟเวอร์ Apache จะดำเนินการตามขั้นตอนต่อไปนี้ตามลำดับ: ขั้นแรก Apache รับ HTTP Request และแยก URL ออก จากนั้นจึงค้นหาไฟล์ที่ตรงกันบน Disk พอหาไฟล์เจอแล้ว Apache จะตรวจสอบว่ามี Handler ที่ตรงกับนามสกุลไฟล์นั้นหรือไม่ ถ้ามี Handler Apache จะส่งไฟล์นั้นให้โปรแกรมที่กำหนดประมวลผล แล้วนำผลลัพธ์ส่งกลับไปให้ Browser ถ้าไม่มี Handler Apache จะส่งเนื้อหาดิบของไฟล์ไปให้ Browser โดยตรง ซึ่งอาจทำให้ผู้เยี่ยมชมเห็นโค้ด PHP หรือ Perl ดิบๆ แทนที่จะเห็นหน้าเว็บที่ถูกต้อง
ดังนั้น Handler จึงเป็นกลไกสำคัญที่คั่นอยู่ระหว่างไฟล์ที่เก็บบน Disk กับสิ่งที่ผู้ใช้เห็นในเบราว์เซอร์ การตั้งค่า Handler ให้ถูกต้องทำให้เว็บไซต์ทำงานได้ถูกต้องและปลอดภัย
ประเภท Apache Handlers ที่ควรรู้จัก
Apache มี Handler หลายประเภทที่ใช้งานบ่อยในสภาพแวดล้อม Hosting ทั่วไป การเข้าใจแต่ละประเภทจะช่วยให้คุณเลือกใช้งานได้ถูกต้องและไม่เกิดข้อผิดพลาด
CGI Handler (cgi-script)
Handler ประเภท cgi-script ใช้สำหรับไฟล์ CGI (Common Gateway Interface) ซึ่งเป็นสคริปต์ที่ต้องรันบนเซิร์ฟเวอร์แล้วส่ง Output กลับไปให้ Browser เช่น ไฟล์ .cgi และ .pl (Perl) ไฟล์เหล่านี้ต้องมีสิทธิ์ Execute (chmod 755) และอยู่ในโฟลเดอร์ cgi-bin จึงจะรันได้
PHP Handler (application/x-httpd-php)
Handler นี้ส่งไฟล์ที่มีนามสกุลที่กำหนด เช่น .php, .php7 หรือ .phtml ไปให้ PHP Interpreter ประมวลผล ปกติเซิร์ฟเวอร์ตั้งค่า Handler สำหรับ .php ไว้แล้ว แต่ถ้าต้องการให้นามสกุลอื่นรัน PHP ได้ ต้องเพิ่ม Handler เองใน DirectAdmin
SSI Handler (server-parsed)
Handler server-parsed เปิดใช้งาน Server-Side Includes (SSI) สำหรับไฟล์นามสกุล .shtml ทำให้สามารถ include เนื้อหาจากไฟล์อื่นได้ก่อนส่งหน้าเว็บไปให้ Browser เหมาะสำหรับเว็บที่ต้องการ Header/Footer ที่ใช้ร่วมกันหลายหน้า
Custom MIME Type Handler
สำหรับไฟล์ประเภทพิเศษที่ไม่ใช่มาตรฐาน คุณสามารถสร้าง Handler ที่ผูก MIME Type กับนามสกุลไฟล์เฉพาะได้ เช่น ต้องการให้ไฟล์ .dat ถูกส่งเป็น application/octet-stream เพื่อให้ Browser ดาวน์โหลดแทนแสดง หรือให้ไฟล์ .json มี Content-Type ที่ถูกต้อง
การตั้งค่า Handler สำหรับ PHP เวอร์ชันต่างๆ
เมื่อโฮสติ้งรองรับ PHP หลายเวอร์ชัน การตั้ง Handler ช่วยให้คุณกำหนดได้ว่าจะให้ไฟล์รันด้วย PHP เวอร์ชันไหน ซึ่งมีประโยชน์มากสำหรับ Application เก่าที่ต้องการ PHP 7.x หรือ Application ใหม่ที่ต้องการ PHP 8.x
PHP 7.x via FastCGI
ในระบบที่ใช้ PHP-FPM หรือ FastCGI Handler ของ PHP 7.x อาจมีรูปแบบคล้าย application/x-httpd-php7 หรือ fcgid-script ขึ้นอยู่กับการตั้งค่าเซิร์ฟเวอร์ ให้ตรวจสอบกับ Support ของ Hosting ว่า Handler ที่ถูกต้องสำหรับ PHP 7.x คืออะไรในระบบนั้น
PHP 8.x via FastCGI
PHP 8.x มักถูกตั้งเป็น Default Handler ในระบบใหม่ ชื่อ Handler อาจเป็น application/x-httpd-php8 หรือชื่อที่ระบบ Hosting กำหนด การเปลี่ยน PHP Version บน DirectAdmin ผ่าน PHP Version Manager เป็นวิธีที่ง่ายกว่าการแก้ Handler โดยตรง แต่การรู้จัก Handler ยังมีประโยชน์เมื่อต้องการควบคุมระดับนามสกุลไฟล์
การใช้ .htaccess ควบคู่กับ Handler
นอกจาก DirectAdmin Panel แล้ว คุณยังสามารถกำหนด Handler ใน .htaccess ได้ด้วยคำสั่ง AddHandler เช่น AddHandler cgi-script .cgi .pl วิธีนี้มีผลเฉพาะโฟลเดอร์ที่วางไฟล์ .htaccess นั้น ซึ่งเหมาะกับการตั้งค่าเฉพาะส่วน ไม่กระทบทั้ง Account
การแก้ปัญหา Handler ที่ใช้งานไม่ได้
เมื่อ Handler ตั้งค่าแล้วแต่ยังไม่ทำงานตามที่ต้องการ มีหลายสาเหตุที่พบบ่อยและวิธีแก้ไขดังนี้
ตรวจสอบ Apache Error Log
ข้อผิดพลาดของ Handler ส่วนใหญ่จะปรากฏใน Error Log ของ Apache ใน DirectAdmin สามารถดู Error Log ได้ที่ Statistics & Logs → Error Log ข้อผิดพลาดที่พบบ่อย เช่น Options ExecCGI is off หมายความว่าโฟลเดอร์นั้นไม่ได้รับอนุญาตให้รัน CGI หรือ Premature end of script headers แสดงว่า CGI Script ไม่ได้ส่ง HTTP Header ที่ถูกต้อง
.htaccess Conflict
ถ้ามีไฟล์ .htaccess หลายไฟล์ในโฟลเดอร์ย่อยที่มีคำสั่ง Handler ขัดแย้งกัน Apache จะใช้คำสั่งล่าสุดที่พบในโฟลเดอร์ที่ใกล้ไฟล์มากที่สุด ตรวจสอบทุก .htaccess ตามเส้นทางโฟลเดอร์ว่ามีคำสั่ง AddHandler, RemoveHandler หรือ SetHandler ที่ไม่ต้องการหรือไม่
Permission ของไฟล์ CGI
ไฟล์ CGI ต้องมี Permission 755 (rwxr-xr-x) ถ้าเป็น 644 (rw-r--r--) Apache จะไม่สามารถรันสคริปต์ได้และจะส่ง Error 403 หรือแสดงโค้ดดิบแทน ตรวจสอบและแก้ Permission ผ่าน File Manager ใน DirectAdmin หรือ FTP Client
Handler ไม่มีผลทันที
บางครั้ง Apache ต้องการเวลาสักครู่เพื่อโหลดการตั้งค่าใหม่ ถ้า Handler ยังไม่ทำงานหลังเพิ่มแล้ว ลองรีเฟรชเบราว์เซอร์โดย Hard Refresh (Ctrl+Shift+R) หรือเคลียร์ Browser Cache ก่อน และตรวจสอบว่า DirectAdmin แสดง Handler ใหม่ในรายการแล้ว
ตัวอย่างการใช้งาน Apache Handler จริง
เพื่อให้เห็นภาพชัดขึ้น ต่อไปนี้เป็นตัวอย่างการใช้งาน Apache Handler ในสถานการณ์จริงที่พบบ่อยในการพัฒนาเว็บ
กรณีที่ 1: เปิดใช้ CGI Script สำหรับระบบ Contact Form เก่า
ถ้าคุณมีระบบ Contact Form เก่าที่ใช้ CGI Script ไฟล์ mail.cgi ต้องเพิ่ม Handler ดังนี้: Handler คือ cgi-script และ Extension คือ .cgi หลังจากนั้นต้องตรวจสอบว่าไฟล์อยู่ใน cgi-bin และมี Permission 755 แล้วทดสอบการทำงานผ่านเบราว์เซอร์
กรณีที่ 2: ให้ไฟล์ .html รันเป็น PHP
บางเว็บไซต์ต้องการซ่อน extension PHP โดยบันทึกไฟล์เป็น .html แต่ให้ PHP ประมวลผลเนื้อหาข้างใน ทำได้โดยเพิ่ม Handler โดยกำหนด Handler เป็น application/x-httpd-php และ Extension เป็น .html อย่างไรก็ตามควรระวังว่าการตั้งค่านี้จะทำให้ทุกไฟล์ .html ในบัญชีถูกส่งให้ PHP ประมวลผล ซึ่งอาจทำให้หน้าเว็บที่เป็น Static HTML ช้าลงเล็กน้อย
กรณีที่ 3: รัน Perl Script สำหรับ Legacy Application
Application เก่าบางตัว เช่น Shopping Cart หรือ Forum รุ่นเก่า ใช้ Perl Script เป็นหลัก ต้องเพิ่ม Handler โดยกำหนด Handler เป็น cgi-script และ Extension เป็น .pl พร้อมตรวจสอบว่าบรรทัดแรกของไฟล์ .pl ระบุ Path ของ Perl Interpreter อย่างถูกต้อง เช่น #!/usr/bin/perl และไฟล์มี Permission 755
กรณีที่ 4: กำหนด MIME Type สำหรับไฟล์ข้อมูลพิเศษ
ถ้ามีไฟล์ข้อมูลประเภทพิเศษ เช่น ไฟล์ .gpx สำหรับข้อมูล GPS ที่ต้องการให้ Browser ดาวน์โหลดแทนแสดง สามารถเพิ่ม Handler โดยกำหนด Handler เป็น application/octet-stream และ Extension เป็น .gpx ซึ่งจะทำให้ Browser เริ่มดาวน์โหลดไฟล์ทันทีที่ผู้ใช้คลิกลิงก์
ความแตกต่างระหว่าง Apache Handler กับ mod_rewrite
ผู้ใช้มักสับสนระหว่าง Apache Handler กับ mod_rewrite เพราะทั้งคู่ตั้งค่าใน .htaccess ได้เหมือนกัน แต่จริงๆ แล้วทั้งสองทำงานคนละระดับและมีวัตถุประสงค์ต่างกัน
Apache Handler — ระดับการประมวลผลเนื้อหา
Handler กำหนดว่า เนื้อหาในไฟล์จะถูกส่งให้โปรแกรมอะไรประมวลผล เช่น ไฟล์ .php ถูกส่งให้ PHP Interpreter และไฟล์ .cgi ถูกรันเป็นโปรแกรม Handler ทำงานหลังจาก Apache หาไฟล์เจอแล้ว ระยะนี้เรียกว่า Content Generation Phase ของ Apache Request Cycle
mod_rewrite — ระดับการจัดการ URL
mod_rewrite ทำงานก่อน Handler โดยเปลี่ยนหรือ Redirect URL ของ Request ก่อนที่ Apache จะหาไฟล์ เช่น เปลี่ยน /blog/hello-world ให้ Apache ไปหาไฟล์ index.php?slug=hello-world แทน mod_rewrite ไม่ได้กำหนดว่าจะประมวลผลเนื้อหาอย่างไร แต่กำหนดว่าจะให้ Apache ไปหาไฟล์ที่ไหน
เมื่อใดควรใช้อะไร
- ต้องการให้ไฟล์นามสกุลพิเศษรันเป็น PHP หรือ CGI → ใช้ Apache Handler
- ต้องการทำ URL ให้สวยงาม (SEO-friendly URL) หรือ Redirect หน้าเก่า → ใช้ mod_rewrite
- ต้องการซ่อน extension
.phpจาก URL → ใช้ mod_rewrite เปลี่ยน URL แล้ว Handler PHP จัดการไฟล์เอง - ต้องการให้ไฟล์
.htmlถูกประมวลผลเป็น PHP → ใช้ Handler กำหนด MIME Type ของ.htmlเป็น PHP Handler
ต้องการ Hosting รองรับ PHP และ Apache เต็มรูปแบบ?
AsiaGB Hosting รองรับ PHP หลายเวอร์ชัน Apache พร้อม .htaccess ใช้งานได้ทันที
ดูแพ็กเกจ Hosting