ไฟล์ .htaccess เริ่มต้นของ WordPress: โค้ดและวิธีกู้คืน
โค้ด .htaccess ที่แน่นอนซึ่ง WordPress เขียนสำหรับ permalink แต่ละบรรทัดทำอะไร และวิธีกู้คืนไฟล์เมื่อโพสต์ขึ้น 404 แต่หน้าแรกยังใช้งานได้
ไฟล์ .htaccess เริ่มต้นของ WordPress คือบล็อก RewriteEngine สั้นๆ ที่ซอฟต์แวร์เขียนลงใน .htaccess ที่รูทของไซต์คุณ เพื่อให้ permalink เช่น /2026/10/ชื่อโพสต์/ เปิดได้แทนที่จะขึ้น 404 มีลักษณะดังนี้:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
กฎเหล่านี้มาจากโค้ดที่ WordPress ใช้สร้างบล็อกนี้ และตรงกับคู่มือ .htaccess ของ WordPress เอง WordPress ยังเขียนบรรทัดคอมเมนต์สามบรรทัดต่อจาก # BEGIN WordPress เพื่อเตือนว่าการแก้ไขระหว่างมาร์กเกอร์จะถูกเขียนทับ บรรทัดเหล่านี้ไม่ได้เปลี่ยนการทำงานของกฎ
ในการติดตั้งแบบซับโฟลเดอร์ WordPress จะใส่พาธของซับโฟลเดอร์ทั้งใน RewriteBase และในกฎสุดท้าย เช่น RewriteBase /blog/ และ RewriteRule . /blog/index.php [L] เครือข่าย multisite ใช้บล็อกอีกแบบหนึ่ง และ WordPress ไม่เขียนไฟล์นี้ให้โดยอัตโนมัติ
สิ่งสำคัญ
- WordPress สร้างบล็อกนี้บน Apache และ LiteSpeed เมื่อมีสิทธิ์เขียนและเปิด pretty permalink ไว้ แค่เปิด Settings > Permalinks ก็พอ
- ถ้าไฟล์หายไปหรือเสียหาย permalink จะคืนค่า 404 ขณะที่หน้าแรกยังโหลดได้ เพราะหน้าแรกไม่ต้องใช้กฎ rewrite
- สิ่งที่คุณหรือปลั๊กอินเพิ่มเข้ามาต้องอยู่ เหนือ
# BEGIN WordPressห้ามอยู่ภายในมาร์กเกอร์ WordPress จะแทนที่ทุกอย่างระหว่างมาร์กเกอร์เมื่ออัปเดตไฟล์

index.php ทดสอบที่มีบรรทัดเดียวแทน WordPressแต่ละบรรทัดทำอะไร
RewriteEngine On เปิดใช้งานโมดูล mod_rewrite ของ Apache สำหรับไดเรกทอรีนี้ ถ้าไม่มีบรรทัดนี้ กฎด้านล่างจะไม่ทำอะไรเลย
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] ไม่เปลี่ยน URL (นั่นคือความหมายของ -) และคัดลอกส่วนหัว Authorization ของคำขอไปไว้ในตัวแปรของเซิร์ฟเวอร์ WordPress อ่านตัวแปรนั้น เพื่อรับชื่อผู้ใช้และรหัสผ่านที่ส่งมาในส่วนหัว เช่น Application Password
RewriteBase / กำหนดคำนำหน้าพาธที่ Apache ใช้กับ URL ที่ถูกเขียนใหม่ WordPress ตั้งค่านี้ตามตำแหน่งของไซต์ การติดตั้งในซับโฟลเดอร์จึงได้ RewriteBase /blog/
RewriteRule ^index\.php$ - [L] เป็นตัวป้องกัน: ถ้าคำขอเป็น index.php อยู่แล้ว การ rewrite จะหยุดและคำขอจะผ่านไปโดยไม่เปลี่ยนแปลง
สองบรรทัด RewriteCond คือตรรกะที่แท้จริง %{REQUEST_FILENAME} !-f และ !-d ถามว่า “คำขอนี้ไม่ตรงกับไฟล์จริง และไม่ตรงกับไดเรกทอรีจริงใช่หรือไม่?” ทั้งสองต้องเป็นจริงกฎสุดท้ายจึงจะทำงาน ดังนั้นรูปภาพจริง ไฟล์ CSS หรือ PDF ที่อัปโหลดจะถูกส่งให้โดยตรงและไม่ผ่านการกำหนดเส้นทางของ WordPress เลย
RewriteRule . /index.php [L] คือสิ่งที่ทำให้ permalink ทำงานได้ ทุกอย่างที่ผ่านสองเงื่อนไขนั้นจะถูกส่งไปที่ index.php แล้ว WordPress จะตัดสินว่า URL นั้นหมายถึงโพสต์ หน้า หรือไฟล์เก็บถาวรใด
WordPress สร้างไฟล์นี้ขึ้นใหม่เมื่อไหร่ และเมื่อไหร่ที่ทำไม่ได้
WordPress ล้างและสร้างกฎ rewrite ใหม่ ทุกครั้งที่หน้าจอ Settings > Permalinks โหลด ดังนั้นแค่เปิดหน้านี้ก็พอ ไม่จำเป็นต้องคลิก Save Changes ถ้า .htaccess หายไป WordPress จะสร้างขึ้นมา ตราบใดที่โฟลเดอร์เขียนได้และเปิด pretty permalink ไว้ ถ้าไฟล์มีอยู่และเขียนได้ WordPress จะแทนที่บล็อกระหว่างมาร์กเกอร์
วิธีนี้แก้ปัญหาไม่ได้ในกรณีต่อไปนี้:
- ไฟล์หรือโฟลเดอร์ของไฟล์เขียนไม่ได้ สำหรับผู้ใช้ที่ PHP ทำงานอยู่ หน้าจอจะแสดงข้อผิดพลาดว่าไฟล์
.htaccessเขียนไม่ได้ พร้อมกฎสำหรับวาง บนโฮสต์บางแห่ง PHP ทำงานในชื่อผู้ใช้ระบบคนละคนกับเจ้าของไฟล์ที่อัปโหลดผ่าน FTP ดังนั้นสิทธิ์ที่ดูถูกต้องในไคลเอนต์ FTP ก็ยังอาจขวาง WordPress ได้ - คุณใช้ nginx คู่มือ nginx ของ WordPress ระบุว่า nginx ไม่มีไฟล์การตั้งค่าระดับไดเรกทอรีแบบ
.htaccessและ WordPress เปลี่ยนการตั้งค่าเซิร์ฟเวอร์ไม่ได้ การกำหนดเส้นทางที่เทียบเท่าคือ directivetry_filesในการตั้งค่าเซิร์ฟเวอร์ ซึ่งผู้ดูแลระบบต้องเป็นคนแก้ไข AllowOverrideถูกตั้งเป็นNoneสำหรับไดเรกทอรีของไซต์คุณในการตั้งค่าหลักของ Apache เอกสารของ Apache ระบุว่า (อ้างอิงต้นฉบับ): “This means .htaccess files are completely ignored unless you explicitly enable them for a directory.” หมายความว่าไฟล์.htaccessจะถูกเพิกเฉยทั้งหมด เว้นแต่คุณจะเปิดใช้งานสำหรับไดเรกทอรีนั้นอย่างชัดเจน WordPress อาจเขียนไฟล์ได้สมบูรณ์แบบ แต่ไฟล์ก็ยังไม่มีผล กฎ rewrite ต้องใช้AllowOverride FileInfo(หรือAll) ซึ่งโฮสต์ของคุณอาจต้องเป็นคนเปลี่ยน- permalink ของคุณตั้งเป็น Plain URL แบบ Plain ไม่ต้องใช้กฎ rewrite ดังนั้น WordPress จึงไม่สร้างไฟล์ให้
วิธีกู้คืนด้วยมือ
ถ้าโพสต์และหน้าต่างๆ ขึ้น 404 ขณะที่หน้าแรกยังทำงานได้ สิ่งแรกที่ควรตรวจคือ .htaccess ที่หายไปหรือเสีย แก้ไขด้วยสองขั้นตอน
1. ลองวิธีแก้แบบคลิกเดียวก่อน เปิด Settings > Permalinks ใน wp-admin แล้วคลิก Save Changes โดยไม่เปลี่ยนแปลงอะไร ถ้า WordPress เขียนไฟล์ได้ ขั้นตอนนี้จะสร้างไฟล์ขึ้นใหม่ ถ้าเขียนไม่ได้ หน้าจอจะแสดงข้อผิดพลาดและกฎที่คุณต้องใช้
2. ถ้าไม่ได้ผล ให้สร้างไฟล์ด้วยมือ เชื่อมต่อผ่าน FTP/SFTP หรือตัวจัดการไฟล์ของโฮสต์ แล้วไปที่โฟลเดอร์รูทของไซต์ ซึ่งปกติคือโฟลเดอร์ที่มี wp-admin ตรวจสอบว่ามี .htaccess อยู่หรือไม่ ชื่อไฟล์ขึ้นต้นด้วยจุด ตัวจัดการไฟล์บางตัวจึงซ่อนไว้โดยค่าเริ่มต้น ให้เปิด “แสดงไฟล์ที่ซ่อนอยู่”
- ถ้าไม่มี ให้สร้างไฟล์ใหม่ชื่อ
.htaccessตรงตัว (ไม่มี.txtไม่มีอะไรก่อนจุด) - วางกฎที่ WordPress แสดงให้ หรือบล็อกเริ่มต้นจากด้านบนของคู่มือนี้ ถ้าติดตั้งแบบซับโฟลเดอร์ ให้ปรับ
RewriteBaseและกฎสุดท้ายให้ตรงกัน - บันทึก แล้วโหลด permalink ของโพสต์ใหม่เพื่อยืนยันว่าทำงาน
ถ้ายังขึ้น 404 อาจเป็นเพราะ .htaccess ถูกเพิกเฉย ให้ตรวจสอบ AllowOverride กับโฮสต์ของคุณ เพราะ Apache จะเพิกเฉยไฟล์ที่ถูกต้องเมื่อปิดตัวเลือกนี้อยู่
กฎของคุณเองเทียบกับบล็อกของ WordPress
ปลั๊กอินหรือการแก้ไขด้วยมืออาจเพิ่มกฎของตัวเอง เช่น การรีไดเรกต์ การป้องกัน hotlink หรือส่วนหัวของแคช ให้เก็บกฎเหล่านั้นไว้นอกบล็อกของ WordPress และอยู่เหนือบล็อก เพื่อให้ทำงานก่อนกฎสุดท้ายที่รับคำขอที่เหลือทั้งหมด:
# กฎที่คุณหรือปลั๊กอินเพิ่มเข้ามา: เหนือมาร์กเกอร์ของ WordPress
<FilesMatch "\.(jpg|jpeg|png|gif)$">
# ตัวอย่าง: การป้องกัน hotlink, กฎแคช ฯลฯ
</FilesMatch>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
ทุกอย่างที่วางไว้ ระหว่าง # BEGIN WordPress และ # END WordPress จะหายไปในครั้งถัดไปที่ WordPress อัปเดตไฟล์ และแค่โหลดหน้าจอ Permalinks ก็ทำให้เกิดขึ้นแล้ว บรรทัดก่อนและหลังมาร์กเกอร์จะยังอยู่ สำหรับการรีไดเรกต์โดยเฉพาะ ดูกฎการรีไดเรกต์ .htaccess ของ WordPress ที่ทำถูกต้อง เพื่อรู้ว่าควรวางไว้ที่ไหนและหลีกเลี่ยงลูปอย่างไร
500 Internal Server Error ทันทีหลังแก้ไขไฟล์ ชี้ไปที่สิ่งที่คุณเพิ่งเปลี่ยน เอกสารของ Apache ระบุว่าบันทึกข้อผิดพลาดน่าจะบอกชื่อ directive ที่ไม่ได้รับอนุญาตหรือข้อผิดพลาดด้านไวยากรณ์ กฎที่คัดลอกจากบทความสอนเก่าๆ อาจทำให้เกิดเรื่องนี้ได้: Order เป็นคำสั่งที่ไม่ถูกต้องบน Apache 2.4 เว้นแต่จะโหลด mod_access_compat ไว้ ให้ย้อนการแก้ไขเพื่อให้ไซต์กลับมา แล้วค่อยอ่านบันทึกข้อผิดพลาด
เหนือกว่าบล็อกเริ่มต้น
บล็อกเริ่มต้นจัดการเฉพาะการกำหนดเส้นทาง permalink และส่วนหัว Authorization หากต้องการเพิ่มความเข้มงวดในการเข้าถึงไฟล์สำคัญ เช่น บล็อกการรัน PHP ใน /uploads หรือปฏิเสธคำขอโดยตรงไปยัง wp-config.php ดูกฎความปลอดภัย .htaccess ของ WordPress ที่ช่วยได้จริง ถ้า permalink ขึ้น 404 ด้วยสาเหตุอื่น เช่น โครงสร้าง permalink ผิด ชั้นแคชที่ให้กฎเก่า หรือความขัดแย้งของ multisite ในซับไดเรกทอรี permalink ของ WordPress ที่ไม่ทำงาน จะอธิบายสาเหตุอื่นๆ
คำถามที่พบบ่อย
ไฟล์ .htaccess เริ่มต้นของ WordPress คืออะไร?
คือบล็อก RewriteEngine ที่ WordPress เขียนระหว่าง # BEGIN WordPress และ # END WordPress ในไฟล์ .htaccess ที่รูทของไซต์ บล็อกนี้ส่งส่วนหัว Authorization ไปให้ PHP และส่งคำขอใดๆ ที่ไม่ใช่ไฟล์หรือโฟลเดอร์จริงไปยัง index.php
โค้ด .htaccess เริ่มต้นที่แน่นอนของ WordPress คืออะไร?
RewriteEngine On, กฎที่ส่งส่วนหัว Authorization ไปให้ PHP, RewriteBase /, กฎที่ปล่อยผ่านสำหรับ index.php, สองเงื่อนไขที่ตรวจสอบว่าคำขอไม่ใช่ไฟล์หรือโฟลเดอร์จริง และกฎสุดท้ายที่ส่งทุกอย่างที่เหลือไปยัง index.php บล็อกทั้งหมดอยู่ที่ด้านบนของคู่มือนี้
ทำไมโพสต์ทั้งหมดของฉันขึ้น 404 ยกเว้นหน้าแรก?
ไฟล์ .htaccess ที่หายไปหรือเสียหายบน Apache ทำให้เกิดรูปแบบนี้ เซิร์ฟเวอร์หาหน้าแรกเจอได้โดยไม่ต้องมีกฎ rewrite ส่วน permalink อื่นทุกตัวต้องใช้กฎเหล่านั้นเพื่อไปถึง index.php เมื่อไม่มีกฎ Apache จึงมองหาไฟล์ที่ไม่มีอยู่และคืนค่า 404
WordPress สร้าง .htaccess ขึ้นใหม่อัตโนมัติหรือไม่?
ใช่ บน Apache หรือ LiteSpeed ที่มี mod_rewrite หากเปิด pretty permalink ไว้และ WordPress เขียนไฟล์ตรงนั้นได้ แค่เปิด Settings > Permalinks ก็พอ ไฟล์ที่หายไปต้องอยู่ในโฟลเดอร์ที่เขียนได้ และไฟล์ที่มีอยู่แล้วต้องเขียนได้ มิฉะนั้นหน้าจอจะแสดงข้อผิดพลาด พร้อมกฎสำหรับวางด้วยมือ
ทำไม nginx ไม่มีไฟล์ .htaccess ของ WordPress?
nginx ไม่มีไฟล์การตั้งค่าระดับไดเรกทอรีแบบ .htaccess ของ Apache การกำหนดเส้นทางแบบเดียวกันจะเขียนเป็นกฎ try_files ในการตั้งค่าเซิร์ฟเวอร์ nginx ซึ่งผู้ดูแลระบบต้องเป็นคนแก้ไข เพราะ WordPress เปลี่ยนการตั้งค่านี้ไม่ได้
ทำไม .htaccess ของฉันพังหลังจากบันทึก permalink?
ตรวจสอบว่ามีกฎที่กำหนดเองถูกวางไว้ภายในมาร์กเกอร์ # BEGIN WordPress และ # END WordPress หรือไม่ WordPress จะแทนที่ทุกอย่างระหว่างมาร์กเกอร์เมื่ออัปเดตไฟล์ กฎนั้นจึงหายไป ให้เก็บกฎที่กำหนดเองไว้เหนือมาร์กเกอร์
แหล่งข้อมูล
- WordPress Advanced Administration: .htaccess
- WordPress Advanced Administration: Nginx
- ซอร์สโค้ดของ WordPress: class-wp-rewrite.php, options-permalink.php, misc.php, load.php, user.php, vars.php
- Apache HTTP Server 2.4: .htaccess files, mod_rewrite, Upgrading to 2.4
สร้าง .htaccess ที่สะอาดและถูกต้อง พร้อมบล็อก permalink เริ่มต้นและกฎความปลอดภัยหรือการรีไดเรกต์ที่คุณต้องการจริงๆ ด้วยเครื่องมือสร้าง .htaccess สำหรับ WordPress แบบฟรี
FAQ
คำถาม
ไฟล์ .htaccess เริ่มต้นของ WordPress คืออะไร?
คือบล็อก RewriteEngine ที่ WordPress เขียนระหว่าง # BEGIN WordPress และ # END WordPress ในไฟล์ .htaccess ที่รูทของไซต์ บล็อกนี้ส่งส่วนหัว Authorization ไปให้ PHP และส่งคำขอใดๆ ที่ไม่ใช่ไฟล์หรือโฟลเดอร์จริงไปยัง index.php
โค้ด .htaccess เริ่มต้นที่แน่นอนของ WordPress คืออะไร?
RewriteEngine On, กฎที่ส่งส่วนหัว Authorization ไปให้ PHP, RewriteBase /, กฎที่ปล่อยผ่านสำหรับ index.php, สองเงื่อนไขที่ตรวจสอบว่าคำขอไม่ใช่ไฟล์หรือโฟลเดอร์จริง และกฎสุดท้ายที่ส่งทุกอย่างที่เหลือไปยัง index.php บล็อกทั้งหมดอยู่ที่ด้านบนของคู่มือนี้
ทำไมโพสต์ทั้งหมดของฉันขึ้น 404 ยกเว้นหน้าแรก?
ไฟล์ .htaccess ที่หายไปหรือเสียหายบน Apache ทำให้เกิดรูปแบบนี้ เซิร์ฟเวอร์หาหน้าแรกเจอได้โดยไม่ต้องมีกฎ rewrite ส่วน permalink อื่นทุกตัวต้องใช้กฎเหล่านั้นเพื่อไปถึง index.php เมื่อไม่มีกฎ Apache จึงมองหาไฟล์ที่ไม่มีอยู่และคืนค่า 404
WordPress สร้าง .htaccess ขึ้นใหม่อัตโนมัติหรือไม่?
ใช่ บน Apache หรือ LiteSpeed ที่มี mod_rewrite หากเปิด pretty permalink ไว้และ WordPress เขียนไฟล์ตรงนั้นได้ แค่เปิด Settings > Permalinks ก็พอ ไฟล์ที่หายไปต้องอยู่ในโฟลเดอร์ที่เขียนได้ และไฟล์ที่มีอยู่แล้วต้องเขียนได้ มิฉะนั้นหน้าจอจะแสดงข้อผิดพลาด พร้อมกฎสำหรับวางด้วยมือ
ทำไม nginx ไม่มีไฟล์ .htaccess ของ WordPress?
nginx ไม่มีไฟล์การตั้งค่าระดับไดเรกทอรีแบบ .htaccess ของ Apache การกำหนดเส้นทางแบบเดียวกันจะเขียนเป็นกฎ try_files ในการตั้งค่าเซิร์ฟเวอร์ nginx ซึ่งผู้ดูแลระบบต้องเป็นคนแก้ไข เพราะ WordPress เปลี่ยนการตั้งค่านี้ไม่ได้
ทำไม .htaccess ของฉันพังหลังจากบันทึก permalink?
ตรวจสอบว่ามีกฎที่กำหนดเองถูกวางไว้ภายในมาร์กเกอร์ # BEGIN WordPress และ # END WordPress หรือไม่ WordPress จะแทนที่ทุกอย่างระหว่างมาร์กเกอร์เมื่ออัปเดตไฟล์ กฎนั้นจึงหายไป ให้เก็บกฎที่กำหนดเองไว้เหนือมาร์กเกอร์