เว็บ PHP ที่มี .htaccess บน BrewInTH: กฎไหนใช้ได้ กฎไหนต้องแก้

ย้ายเว็บ PHP ที่มี .htaccess มา BrewInTH? ระบบอ่านกฎให้ตอนเผยแพร่ ดูว่ากฎไหนระบบทำให้ กฎไหนถูกแปลง กฎไหนไม่มีผล พร้อมวิธีแก้และจุดที่ต้องระวัง
ย้ายเว็บ PHP จากโฮสต์เดิมมาแล้ว หน้าแรกเปิดได้ปกติ แต่บางลิงก์อย่าง /about กลับพาไปหน้าแรก ลิงก์เก่าที่เคยส่งต่อไปหน้าใหม่ไม่ทำงาน หรือโฟลเดอร์ที่เคยใส่รหัสผ่านไว้เปิดได้เฉย ๆ ต้นเหตุส่วนใหญ่อยู่ในไฟล์เล็ก ๆ ชื่อ .htaccess ที่โฮสต์แบบ cPanel ใช้กันมานาน และเว็บของคุณพึ่งไฟล์นี้อยู่โดยไม่รู้ตัว
BrewInTH ไม่ได้ใช้ Apache จึงไม่ได้อ่าน .htaccess ทุกครั้งที่มีคนเปิดเว็บแบบโฮสต์เดิม แต่ตั้งแต่กลางเดือนตุลาคม 2026 ระบบอ่านไฟล์นี้ให้ตอนเผยแพร่ แปลงกฎที่แปลงได้ และบอกว่ากฎไหนใช้ไม่ได้ บทความนี้อธิบายว่ากฎแต่ละแบบจะเป็นอย่างไรบน BrewInTH ดูผลได้ตรงไหน และแก้กฎที่เหลืออย่างไร
สรุปสั้นก่อนอ่าน
🧙 เว็บ PHP บน BrewInTH ทำงานด้วย Caddy (FrankenPHP) ไม่ใช่ Apache ระบบอ่าน.htaccessให้ทุกครั้งที่เผยแพร่
✅ กฎส่งทุกที่อยู่ไปindex.php(WordPress, Laravel) และกฎบังคับ https ระบบทำให้อยู่แล้ว
🔁RewriteRuleแบบง่ายและ redirect 301/302 ถูกแปลงเป็นเส้นทางของเว็บ
⚠️Redirect 301,ErrorDocument,Header,php_valueและการล็อกโฟลเดอร์ด้วย Deny หรือรหัสผ่าน ไม่มีผล
📋 ผลการแปลงอยู่ในหัวข้อ สิ่งที่ระบบทำให้ และกล่อง ตรวจความพร้อมก่อนเผยแพร่
.htaccess คืออะไร และบน BrewInTH ต่างกันตรงไหน
.htaccess เป็นไฟล์ตั้งค่าของเว็บเซิร์ฟเวอร์ Apache โฮสต์แบบ cPanel ส่วนใหญ่ใช้ Apache หรือเซิร์ฟเวอร์ที่อ่านไฟล์นี้ได้เหมือนกัน ทุกครั้งที่มีคนเปิดเว็บ เซิร์ฟเวอร์จะอ่านไฟล์นี้แล้วทำตามกฎข้างใน เช่น เปลี่ยนที่อยู่สวย ๆ ให้ไปทำงานที่ไฟล์ PHP จริง ส่งลิงก์เก่าไปหน้าใหม่ หรือห้ามเปิดบางโฟลเดอร์
เว็บ PHP บน BrewInTH ทำงานด้วย Caddy (FrankenPHP) ซึ่งไม่อ่าน .htaccess ระบบจึงอ่านแทนตอนเผยแพร่ กฎ RewriteRule ที่แปลงได้กลายเป็นเส้นทางของเว็บ กฎที่แปลงไม่ได้ถูกรายงานให้เห็น ตัวไฟล์ .htaccess ยังอยู่กับเว็บ แต่ใครเปิดจากเบราว์เซอร์จะได้หน้า 404
ระบบอ่านให้ทุกทางที่นำเว็บ PHP ขึ้นด้วยไฟล์: หน้า อัปโหลดแล้วขึ้นเว็บ (ZIP หรือไฟล์ backup ของ cPanel), AI agent ที่เชื่อมด้วยลิงก์ + token, ปุ่ม Build และเผยแพร่ ในแท็บ การเผยแพร่ และปุ่ม เผยแพร่ไฟล์จาก SFTP ไฟล์ที่ถูกอ่านคือ .htaccess ชั้นบนสุดของเว็บ ระดับเดียวกับ index.php ไฟล์ .htaccess ในโฟลเดอร์ย่อยไม่ถูกอ่าน
ระบบแยกกฎใน .htaccess เป็น 3 กลุ่ม

กลุ่ม 1: ระบบทำให้อยู่แล้ว
- ส่งที่อยู่ที่ไม่มีไฟล์จริงไปที่
index.phpเป็นกฎหลักของ WordPress, Laravel, CodeIgniter และเว็บที่จัดเส้นทางเอง บน BrewInTH ที่อยู่ที่ไม่ตรงกับไฟล์ใดไปที่index.phpอยู่แล้ว ลิงก์บทความของ WordPress แบบ/2026/10/ชื่อบทความ/จึงใช้ได้ทันที - บังคับ https ทุกที่อยู่ของเว็บถูกส่งจาก http ไป https ให้เอง และหน้าเว็บมี HSTS อยู่แล้ว (HTTPS คืออะไร และ BrewInTH ทำให้ยังไง)
- กฎสองบรรทัดของ WordPress ที่ไม่ได้เปลี่ยนอะไร คือ
^index\.php$ - [L]กับบรรทัดส่งต่อ Authorization
กลุ่ม 2: แปลงเป็นเส้นทางของเว็บให้
RewriteRule แบบง่ายถูกแปลงตอนเผยแพร่ เช่น
RewriteRule ^news/([0-9]+)/?$ news.php?id=$1 [L,QSA]
RewriteRule ^product/([a-z0-9-]+)$ index.php?page=product&slug=$1 [L]
RewriteRule ^old-page\.html$ /new-page [R=301,L]
/news/12/ไปทำงานที่news.php?id=12และ/product/red-shirtไปที่index.php?page=product&slug=red-shirt- ลิงก์เก่าถูกส่งไปหน้าใหม่ด้วย 301 หรือ 302 จะส่งไปเว็บอื่นด้วยที่อยู่เต็ม
https://…ก็ได้ - flag ที่ใช้ได้คือ
L,QSA,NC,R(รวมR=301,R=302),NE,ENDและPTส่วนเงื่อนไขใช้ได้แค่ "ไม่ใช่ไฟล์" กับ "ไม่ใช่โฟลเดอร์" (RewriteCond %{REQUEST_FILENAME} !-fและ!-d) RewriteBaseถูกอ่านด้วย เว็บที่เคยอยู่ในโฟลเดอร์ย่อยของโฮสต์เดิมจึงแปลงได้ถูก
กลุ่ม 3: ไม่มีผล ต้องแก้ทางอื่น
- RewriteRule ที่ใช้เงื่อนไขแบบอื่น เช่น ดูจากเว็บต้นทาง (
HTTP_REFERERในกฎกันเว็บอื่นดึงรูป), ดูจากเบราว์เซอร์ (HTTP_USER_AGENTในกฎบล็อกบอท), ดูจากQUERY_STRINGหรือ%{REQUEST_FILENAME}\.php -f - กฎที่ใช้ flag อื่น เช่น
[F]ที่แปลว่าห้ามเข้า และ regex บางแบบ เช่น(?!…) - คำสั่งของ Apache ที่ไม่ใช่ RewriteRule เช่น
Redirect 301,RedirectMatch,ErrorDocument,Header,ExpiresByType,SetEnv,Deny from all,Require all deniedและAuthTypeกับไฟล์.htpasswd php_valueและphp_flag
ดูผลการแปลงตรงไหน

ระบบบอกผลไว้ 3 ที่ ตามทางที่คุณส่งไฟล์
- หน้าอัปโหลดแล้วขึ้นเว็บ หลังส่งไฟล์ ดูหัวข้อ สิ่งที่ระบบทำให้ บรรทัดที่ขึ้นต้นด้วย
.htaccess:บอกจำนวนกฎที่แปลงให้แล้วพร้อมตัวอย่าง เช่น/news/1/ → /news.php?id=1และบอกกฎที่แปลงไม่ได้พร้อมที่อยู่ที่จะไม่ทำงาน ถ้าไฟล์มีแต่กฎที่ระบบทำให้อยู่แล้ว จะขึ้นว่าไม่ต้องทำอะไร (วิธีใช้หน้าอัปโหลดแล้วขึ้นเว็บ) - แท็บการเผยแพร่ ของโปรเจกต์ ในกล่อง ตรวจความพร้อมก่อนเผยแพร่ มีบรรทัดเรื่อง
.htaccessของไฟล์ ZIP ที่เลือก - AI agent เห็นรายการเดียวกันตอนตรวจก่อนเผยแพร่ และคู่มือของ BrewInTH บอก AI ให้ย้ายกฎที่แปลงไม่ได้ไปไว้ใน
index.php
หน้าสรุปไม่ได้พูดถึงทุกบรรทัด ถ้าไฟล์มี RewriteRule อยู่ด้วย คำสั่งอย่าง Redirect 301 หรือ Deny from all จะไม่ถูกเอ่ยถึง หลังเว็บออนไลน์จึงควรเปิดที่อยู่สำคัญทดสอบเองบนลิงก์ของ BrewInTH ก่อนสลับโดเมน
แก้กฎที่ใช้ไม่ได้ ทีละแบบ
ลิงก์เก่าที่ใช้ Redirect 301
Redirect และ RedirectMatch เป็นคำสั่งคนละตัวกับ RewriteRule ระบบไม่แปลงให้ เขียนใหม่เป็น RewriteRule แล้วส่งไฟล์ชุดใหม่
# เดิม: ระบบไม่อ่าน
Redirect 301 /old-page.html /new-page
# ใหม่: ระบบแปลงให้
RewriteRule ^old-page\.html$ /new-page [R=301,L]
ลิงก์ที่ตัด .php ออก (/about แทน /about.php)
เว็บ PHP หลายเว็บใช้กฎแบบนี้เพื่อให้ /about เปิด about.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]
บรรทัด %{REQUEST_FILENAME}\.php -f เป็นเงื่อนไขที่ระบบแปลงไม่ได้ ทั้งกฎจึงไม่มีผล และ /about จะไปที่ index.php แทน เว็บที่มีไม่กี่หน้า เขียนกฎทีละหน้าแทน แบบนี้ระบบแปลงได้
RewriteRule ^about/?$ about.php [L]
RewriteRule ^contact/?$ contact.php [L]
เว็บที่มีหลายหน้า ให้ index.php จัดเส้นทางเองตาม prompt ด้านล่าง
หน้า 404 ของตัวเอง (ErrorDocument)
บนเว็บ PHP ที่มี index.php อยู่ชั้นบนสุด ที่อยู่ที่ไม่มีไฟล์จริงจะไปที่ index.php เสมอ ถ้า index.php เป็นหน้าแรกธรรมดา คนที่พิมพ์ที่อยู่ผิดจะเห็นหน้าแรกแทนหน้า 404 วิธีแก้คือให้ index.php ตรวจที่อยู่ก่อน ถ้าไม่ใช่หน้าที่มีจริงให้ตอบหน้า 404 พร้อมสถานะ 404
กฎที่เหลือ: ให้ AI ย้ายเข้า index.php
คัดลอกบรรทัด .htaccess: จากหน้าสรุป แล้วส่งให้แชต AI หรือ coding agent ที่ใช้อยู่ พร้อมไฟล์ index.php และ .htaccess
เว็บ PHP นี้ย้ายจาก Apache มาอยู่บน BrewInTH ซึ่งใช้ Caddy (FrankenPHP) และไม่อ่าน .htaccess
ที่อยู่ที่ไม่มีไฟล์จริงจะถูกส่งไป index.php เสมอ
กฎต่อไปนี้ระบบแปลงไม่ได้: (วางบรรทัด .htaccess: จากหน้าสรุปตรงนี้)
1. ย้ายการทำงานของกฎเหล่านี้ไปไว้ต้นไฟล์ index.php โดยอ่านที่อยู่จาก $_SERVER['REQUEST_URI']
2. ที่อยู่ที่ไม่ตรงกับหน้าใดเลย ให้ตอบหน้า 404 พร้อม http_response_code(404)
3. ห้ามแก้ไฟล์อื่นที่ไม่เกี่ยวข้อง
4. ส่ง index.php ฉบับเต็มกลับมา พร้อมรายการว่าที่อยู่ไหนไปทำงานที่ไฟล์ไหน
แก้เสร็จแล้วส่งไฟล์ชุดใหม่ที่โปรเจกต์เดิม แล้วดูหน้าสรุปอีกครั้ง
ข้อควรระวัง: สิ่งที่ .htaccess เคยป้องกันไว้

ไฟล์ที่เว็บ PHP ส่วนใหญ่ต้องซ่อน ระบบกันให้แล้วโดยไม่ต้องมีกฎ ได้แก่ ไฟล์และโฟลเดอร์ที่ชื่อขึ้นต้นด้วยจุด เช่น .env และ .git (ยกเว้น /.well-known/), ไฟล์ .sql .sqlite .db .log, error_log, cgi-bin และ composer.json กับ README.md ที่ชั้นบนสุด ส่วนรายการไฟล์ในโฟลเดอร์ไม่แสดงอยู่แล้ว
แต่การล็อกที่เขียนไว้ใน .htaccess ไม่มีผล ตรวจ 3 เรื่องนี้ก่อนเปิดเว็บจริง
- โฟลเดอร์ที่ห้ามเปิดด้วย
Deny from allหรือRequire all deniedเช่น โฟลเดอร์ backup หรือ includes ไฟล์ข้างในจะเปิดจากเว็บได้ เอาไฟล์ที่ไม่ต้องอยู่บนเว็บ เช่น ไฟล์ backup ออกจากชุดที่ส่งขึ้น ส่วนไฟล์ที่เว็บต้องใช้ ให้ AI ย้ายการป้องกันไปไว้ในโค้ด - โฟลเดอร์ที่ตั้งรหัสผ่านด้วย
.htpasswdเช่น หน้าแอดมิน จะเปิดได้โดยไม่ถามรหัส ให้ AI เพิ่มการเข้าสู่ระบบด้วยโค้ด PHP ก่อนเปิดเว็บ - ไฟล์ที่ไม่ใช่
.phpซึ่งเคยกันไว้ด้วยกฎ เช่นconfig.inc,settings.iniหรือไฟล์.bakและ.zipในโฟลเดอร์ของเว็บ เปิดอ่านหรือดาวน์โหลดได้ทั้งไฟล์ ย้ายรหัสผ่านไปไว้ในแท็บ ตั้งค่าแอป แล้วให้โค้ดอ่านด้วยgetenv()(เก็บ API key และรหัสผ่านให้ปลอดภัย)
เรื่องอื่นที่เคยตั้งใน .htaccess
www กับไม่มี www กฎบังคับให้มีหรือไม่มี www. ระบบข้ามไป และหน้าสรุปนับรวมกับกฎที่ระบบทำให้ ณ วันที่เขียน BrewInTH ไม่ได้ส่งชื่อหนึ่งไปอีกชื่อให้ ถ้าเชื่อมทั้ง example.com และ www.example.com ไว้ในแท็บ โดเมน ทั้งสองชื่อเปิดเว็บเดียวกัน เลือกชื่อที่ใช้เป็นลิงก์ของเว็บด้วยปุ่ม ใช้เป็นลิงก์หลัก ถ้าอยากให้แถบที่อยู่เหลือชื่อเดียว ให้ AI เพิ่ม redirect 301 ไว้ต้นไฟล์ index.php (ใช้โดเมนของตัวเองกับ BrewInTH)
ค่าของ PHP มาจากแพ็กเกจ บรรทัด php_value และ php_flag จึงไม่มีผล ขนาดอัปโหลด (upload_max_filesize และ post_max_size) เป็น 20 MB บน Free และ 400 MB บนแพ็กเกจที่จ่ายเงิน ข้อความ error ของ PHP ไม่แสดงบนหน้าเว็บ แต่ไปอยู่ในแท็บ บันทึกการทำงาน ส่วนค่าที่ PHP ยอมให้โค้ดเปลี่ยนเอง เช่น memory_limit ตั้งด้วย ini_set() ในโค้ดได้
SetEnv และ Header ค่าที่เคยตั้งด้วย SetEnv ให้ใส่ในแท็บ ตั้งค่าแอป ช่อง ชื่อค่า และ ค่า แล้วกด บันทึก โค้ดอ่านด้วย getenv() ค่าที่บันทึกหลังเผยแพร่ครั้งล่าสุดมีผลเมื่อเผยแพร่ครั้งถัดไป ส่วน header ของหน้า PHP ส่งจากโค้ดด้วย header() การบีบอัดหน้าเว็บระบบทำที่ทางเข้าให้อยู่แล้ว
คำถามที่พบบ่อย
ต้องลบ .htaccess ออกก่อนส่งไฟล์ไหม
ไม่ต้อง ส่งไปพร้อมเว็บได้เลย ระบบใช้ไฟล์นี้อ่านกฎ และไม่มีใครเปิดอ่านไฟล์นี้จากเว็บได้
แก้ .htaccess แล้วต้องทำอะไรต่อ
เผยแพร่ใหม่ เพราะระบบอ่านกฎตอนเผยแพร่ ส่ง ZIP ชุดใหม่ที่โปรเจกต์เดิมในหน้า อัปโหลดแล้วขึ้นเว็บ, กด เผยแพร่ไฟล์จาก SFTP ถ้าแก้ผ่าน FileZilla (อัปโหลดไฟล์ด้วย SFTP) หรือให้ AI agent เผยแพร่ใหม่
เว็บ WordPress ต้องทำอะไรกับ .htaccess ไหม
ส่วนใหญ่ไม่ต้อง กฎมาตรฐานของ WordPress ระบบทำให้อยู่แล้ว ถ้าปลั๊กอินแคชเขียนกฎยาว ๆ ไว้ หน้าสรุปจะเตือนว่าแปลงไม่ได้ เว็บยังเปิดได้ตามปกติผ่าน PHP แต่ส่วนที่ปลั๊กอินทำผ่าน .htaccess รวมถึงการป้องกันของปลั๊กอินความปลอดภัย จะไม่ทำงาน
เว็บ HTML ล้วน (static) ใช้กฎใน .htaccess ได้ไหม
ไม่ได้ เว็บ static ไม่มี RewriteRule ที่อยู่ที่ไม่มีไฟล์ได้หน้า 404 หรือไฟล์ 404.html ของเว็บ ถ้าอยากได้ลิงก์ไม่มีนามสกุล ให้เก็บแต่ละหน้าเป็นโฟลเดอร์ เช่น about/index.html แล้วลิงก์ไป /about/
นำเว็บขึ้นจาก Git (GitHub หรือ GitLab) กฎถูกแปลงไหม
ณ วันที่เขียน ยังไม่ การเผยแพร่จาก Git ไม่ได้อ่าน .htaccess ถ้าเว็บต้องใช้กฎเหล่านี้ ให้ย้ายเส้นทางไปไว้ใน index.php
สรุป
ย้ายเว็บ PHP มา BrewInTH ไม่ต้องทิ้ง .htaccess กฎพื้นฐานอย่างส่งทุกที่อยู่ไป index.php และบังคับ https ระบบทำให้อยู่แล้ว RewriteRule แบบง่ายและ redirect ถูกแปลงให้ตอนเผยแพร่ ส่วนกฎที่เหลือ หน้าสรุปบอกว่าที่อยู่ไหนจะไม่ทำงาน ย้ายกฎพวกนั้นเข้า index.php เขียน Redirect 301 ใหม่เป็น RewriteRule ตรวจโฟลเดอร์ที่เคยล็อกไว้ แล้วทดสอบที่อยู่สำคัญบนลิงก์ของ BrewInTH ก่อนสลับโดเมน
