ตอนนี้ผมเขียนไว้ประมาณ แต่มันก็ยังไม่ได้ ผิดถูกยังไงชี้แนะด้วยครับ
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteRule ^archives/(.*)/([0-9]+)/$ archives.php?p=$1
</IfModule>
ข้อสังเกตุสำหรับการทำ mod_rewrite นะครับ
1. mod_rewrite มีลำดับชั้นของ cond & rule นั่นหมายถึงว่า ชุด cond & rule ไหนอยู่สูงกว่า จะเช็คตัวนั้นก่อน #ท่านเห็นอะไรหรือยัง
2. ถ้าเราต้องการทำ custom rule ก่อน default rule ให้เราวาง cond & rule ที่ต้องการทำไว้สูงกว่า default rule โดยตัว default ของ wp มันจะเริ่มจาก
// .... custom cond & rule ของเรา
RewriteRule ^index\.php$ - [L]
3. ตัวอย่างผมทดสอบใน wp 4.9 จะเป็นดังนี้
RewriteCond {REQUEST_FILENAME} !-f
RewriteCond {REQUEST_FILENAME} !-d
RewriteRule ^archives/([0-9]+)(/.*|$) archives.php?id=$1&slug=$2 [QSA,L]
#default wp cond & rule
RewriteRule ^index\.php$ - [L]
4. จากด้านบนจะเห็นว่า ถ้าใน url มันมีแมชท์กับ custom rule เราเมื่อไหร่ ให้มันไปที่ archives.php แล้วส่ง parameter ไปด้วย #ตัวอย่างผมส่งไป 2 ตัว id,slug
url: yoursite.com/archives/12/fucking-cms-system-you-should-consider
matches:
id: 12, slug: fucking-cms-system-you-should-consider
# รองรับ
yoursite.com/archives/id
yoursite.com/archives/id/slug
5. ถ้าลืมสร้างไฟล์ archives.php ไว้ใน root เทียบเท่ากับไฟล์ index.php นะครับ
6. ในไฟล์ archives.php
7. ถ้ายังไม่ได้อีก ลองแนบโค๊ดแบบเต็มมาดูครับ เด๋วผมช่วยดูให้อีกที
ปล. ต้องขออภัยที่ยาวไปหน่อย คือผมต้องการให้เข้าใจ มากกว่าแค่เอาโค๊ดไปใช้งานครับ