Hotlink Protection DirectAdmin

Hotlinking คือการที่เว็บไซต์อื่นนำ URL รูปภาพหรือไฟล์บนเซิร์ฟเวอร์ของคุณไปฝังในเว็บของตัวเองโดยตรง ทำให้เซิร์ฟเวอร์ของคุณต้องส่ง Bandwidth ออกไปแต่คุณไม่ได้รับ Traffic จริงๆ เลย ปัญหานี้ทำให้ Bandwidth หมดเร็วโดยไม่จำเป็น และบน Shared Hosting อาจทำให้เว็บช้าลงหรือโดนระงับบัญชี

Hotlinking คืออะไร? ทำไมถึงอันตราย?

สมมติว่าคุณมีรูปภาพที่ https://yourdomain.com/img/product.jpg และเว็บอื่นใช้ HTML ว่า <img src="https://yourdomain.com/img/product.jpg"> — ทุกครั้งที่ผู้เยี่ยมชมเว็บนั้นโหลดรูป เซิร์ฟเวอร์ของคุณต้องส่งไฟล์นั้นออกไป คุณเสีย Bandwidth โดยตรง

ผลกระทบที่เกิดขึ้น:

วิธีที่ 1: เปิด Hotlink Protection ผ่าน DirectAdmin

DirectAdmin มีฟีเจอร์ Hotlink Protection ในตัว ตั้งค่าได้ง่ายโดยไม่ต้องแก้ .htaccess เอง:

  1. Login เข้า DirectAdmin → คลิก Advanced Features
  2. เลือก Hotlink Protection
  3. เปิดสวิตช์ Enable Hotlink Protection
  4. ใส่ Allowed URLs — โดเมนที่อนุญาตให้ hotlink ได้ (เช่น โดเมนของคุณเอง)
  5. ใส่ Allowed Extension — นามสกุลไฟล์ที่ต้องการป้องกัน เช่น jpg,jpeg,png,gif,webp,pdf,mp3,mp4
  6. ระบุ Redirect URL — URL รูปภาพที่จะแสดงแทนเมื่อมีการ hotlink (เช่น รูป "No Hotlinking")
  7. คลิก Save

DirectAdmin จะสร้าง rule ใน .htaccess ให้อัตโนมัติ

วิธีที่ 2: ตั้งค่าด้วย .htaccess เอง

หากต้องการควบคุมละเอียดกว่า หรือ Hosting ไม่มีหน้า Hotlink Protection GUI ให้เพิ่มโค้ดนี้ใน .htaccess ที่ public_html/:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com/ [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp|svg|pdf|mp3|mp4)$ - [F,NC,L]

โค้ดนี้ทำงานดังนี้:

แทนที่ yourdomain.com ด้วยโดเมนจริงของคุณ ทุกครั้งก่อนบันทึก และถ้ามีหลายโดเมนที่อนุญาต ให้เพิ่ม RewriteCond เพิ่มได้

ทำความเข้าใจ Bandwidth: ทำไม Hotlink ถึงแพงกว่าที่คิด

หลายคนมองว่า Hotlink เป็นแค่เรื่องเล็กน้อย แต่ในความเป็นจริง Bandwidth ที่ถูกขโมยอาจส่งผลกระทบหนักมาก โดยเฉพาะบน Shared Hosting ที่มี Quota จำกัด มาดูตัวเลขจริงกัน

ตัวอย่างการคำนวณ Bandwidth ที่หายไป

สมมติว่าคุณมีรูปสินค้าขนาด 200 KB และเว็บอื่นฝัง URL รูปของคุณไว้ในหน้าที่มีผู้เยี่ยมชม 10,000 คน/วัน

สถานการณ์ Bandwidth/วัน Bandwidth/เดือน
รูป 200 KB × 10,000 visitor/วัน ~2 GB ~60 GB
รูป 500 KB × 10,000 visitor/วัน ~5 GB ~150 GB
PDF 5 MB × 1,000 downloads/วัน ~5 GB ~150 GB

แพ็กเกจ Shared Hosting ส่วนใหญ่มี Bandwidth จำกัด 10–30 GB/เดือน เห็นได้ชัดว่า Hotlink เพียงแหล่งเดียวอาจทำให้ Quota หมดก่อนสิ้นเดือน

Hotlink Protection สำหรับเว็บ WordPress โดยเฉพาะ

ถ้าคุณใช้ WordPress มีวิธีเพิ่มเติมในการป้องกัน Hotlink นอกจาก .htaccess ระดับ Apache ได้แก่:

ผ่าน wp-config.php และ WP_CONTENT_URL

เพิ่มโค้ดนี้ในไฟล์ functions.php ของ Theme เพื่อเพิ่ม HTTP Header ป้องกัน Hotlink บนไฟล์ที่เสิร์ฟผ่าน WordPress:

// ป้องกัน Hotlink ผ่าน WordPress Headers
function block_hotlinks() {
    $referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
    $allowed = 'yourdomain.com';
    if ($referer && strpos($referer, $allowed) === false) {
        // ตรวจสอบนามสกุลไฟล์
        $ext = pathinfo(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), PATHINFO_EXTENSION);
        if (in_array(strtolower($ext), ['jpg','jpeg','png','gif','webp','pdf'])) {
            header('HTTP/1.1 403 Forbidden');
            exit;
        }
    }
}
add_action('init', 'block_hotlinks');

Plugin ที่แนะนำ

อย่างไรก็ตาม วิธีที่ดีที่สุดยังคงเป็นการตั้งค่าระดับ Apache ผ่าน .htaccess เพราะหยุดได้ก่อนที่ WordPress จะโหลดขึ้นมา ประหยัด Server Resources มากกว่า

Redirect ไปรูปเตือนแทนการ Block

แทนที่จะตอบ 403 คุณสามารถ Redirect ไปยังรูปภาพ "No Hotlinking Allowed" เพื่อให้เว็บผู้ hotlink แสดงรูปเตือนแทน:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com/ [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp)$ /img/no-hotlink.jpg [R=302,NC,L]

สร้างรูป no-hotlink.jpg ไว้ใน /img/ เช่นเป็นรูปที่มีข้อความ "Image not available — visit yourdomain.com" แล้วอัพโหลดขึ้นเซิร์ฟเวอร์

อนุญาตหลายโดเมน

หากมีโดเมนหลายตัวที่ต้องการอนุญาต (เช่น CDN หรือ Subdomain อื่น) ให้เพิ่ม RewriteCond หลายบรรทัด:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain2\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^https?://subdomain\.yourdomain\.com/ [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp|pdf)$ - [F,NC,L]

ตรวจสอบว่า Hotlink Protection ทำงานถูกต้อง

หลังตั้งค่าเสร็จ ทดสอบด้วยวิธีเหล่านี้:

  1. เปิด Developer Tools ในเบราว์เซอร์ → Network Tab
  2. เข้าดูรูปภาพโดยตรงจาก URL — ต้องโหลดได้ปกติ (เพราะไม่มี Referer)
  3. สร้างหน้า HTML ชั่วคราวบนโดเมนอื่น (หรือใช้ codepen.io) แล้วฝัง URL รูปของคุณ
  4. หากตั้งค่าถูกต้อง รูปจะแสดง 403 หรือเปลี่ยนเป็นรูปเตือน

หมายเหตุ: Google Bot และ Social Media Crawler (Facebook, Twitter) ส่ง Referer ที่แตกต่างกัน ถ้าต้องการให้รูป OG Preview ทำงาน ให้เพิ่ม Exception สำหรับ Crawler เหล่านั้น หรือใช้ตัวเลือก "Allow Empty Referer" ในการตั้งค่า

สิ่งที่ควรรู้เพิ่มเติม

ป้องกัน Hotlink ไฟล์เสียงและวิดีโอ

นอกจากรูปภาพ ไฟล์มีเดียอย่าง MP3 MP4 PDF หรือ ZIP ก็สามารถถูก Hotlink ได้เช่นกัน และเนื่องจากไฟล์เหล่านี้มีขนาดใหญ่กว่ารูปมาก ความเสียหายจาก Bandwidth จึงสูงกว่าหลายเท่า

โค้ดตัวอย่างสำหรับป้องกันไฟล์มีเดียโดยเฉพาะ:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com/ [NC]
RewriteRule \.(mp3|mp4|avi|mkv|mov|zip|rar|7z|pdf|docx|xlsx)$ - [F,NC,L]

สิ่งสำคัญที่ต้องระลึกไว้เสมอคือ ผู้ที่ทำ Hotlink ไฟล์วิดีโอขนาดใหญ่อาจทำให้ Bandwidth ของคุณหมดใน 1–2 วัน แม้เว็บของคุณจะมี Traffic ต่ำก็ตาม ดังนั้นควรเพิ่มไฟล์นามสกุลมีเดียทุกประเภทเข้าไปในกฎ RewriteRule เสมอ

การตั้ง Bandwidth Limit สำหรับ Media Files

บนเซิร์ฟเวอร์บางตัวที่รองรับ mod_ratelimit สามารถจำกัดความเร็วดาวน์โหลดเพิ่มเติมได้ เพื่อป้องกันกรณีที่ Hotlink Protection ไม่ทำงาน (เช่น ผู้ Hotlink ใช้ API แทน Browser ที่ส่ง Referer ถูกต้อง):

# จำกัดความเร็ว Download สำหรับไฟล์ขนาดใหญ่
<FilesMatch "\.(mp4|mp3|zip|pdf)$">
  SetOutputFilter RATE_LIMIT
  SetEnv rate-limit 500
</FilesMatch>

ค่า 500 หมายถึงจำกัดที่ 500 KB/s ต่อการดาวน์โหลดหนึ่งครั้ง ทำให้แม้ถูก Hotlink ก็ใช้ Bandwidth น้อยลงอย่างมีนัยสำคัญ ลูกค้าทั่วไปที่ดาวน์โหลดจากหน้าเว็บของคุณจะไม่รู้สึกต่างเพราะความเร็ว 500 KB/s ยังถือว่าเร็วมาก

Hotlink Protection กับ CDN และ Cloudflare

ถ้าเว็บของคุณใช้ CDN หรือ Cloudflare อยู่แล้ว มีตัวเลือกเพิ่มเติมที่ทำงานได้ดีกว่า .htaccess สำหรับการป้องกัน Hotlink

Cloudflare Hotlink Protection

Cloudflare มีฟีเจอร์ Scrape Shield > Hotlink Protection ในหน้า Dashboard เปิดได้ด้วยคลิกเดียว ทำงานที่ Edge ก่อนที่ Request จะถึงเซิร์ฟเวอร์จริง ข้อดีคือ:

วิธีเปิด: ไปที่ Cloudflare Dashboard → เลือก Domain → Security → Scrape Shield → เปิด Hotlink Protection

การตั้งค่า Whitelist สำหรับ CDN

ถ้าใช้ CDN เช่น Bunny CDN หรือ KeyCDN ร่วมกับเซิร์ฟเวอร์หลัก ต้องเพิ่ม CDN domain ใน Whitelist ด้วย ไม่เช่นนั้น CDN จะ Pull รูปจากเซิร์ฟเวอร์ไม่ได้:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^https?://[^.]+\.b-cdn\.net/ [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp|pdf)$ - [F,NC,L]

แทนที่ b-cdn.net ด้วย Domain ของ CDN ที่คุณใช้จริง ตรวจสอบได้จาก Dashboard ของผู้ให้บริการ CDN

เปรียบเทียบวิธีป้องกัน Hotlink

วิธี ระดับ ความยาก เหมาะกับ
DirectAdmin GUI Apache ง่ายมาก มือใหม่
.htaccess manual Apache ปานกลาง ต้องการควบคุมละเอียด
Cloudflare Scrape Shield Edge/CDN ง่ายมาก ใช้ Cloudflare อยู่แล้ว
WordPress Plugin PHP ง่าย เว็บ WordPress

โฮสติ้งไทยที่รองรับ .htaccess เต็มรูปแบบ

AsiaGB Hosting รองรับ mod_rewrite และ Hotlink Protection ทุกแพ็กเกจ เริ่มต้น 500 บาท/ปี Uptime 99%

ดูแพ็กเกจโฮสติ้ง