เทคนิคการทำ mod_rewrite แบบนี้ ใครทำเป็นบ้าง ??

เริ่มโดย pch081, 13 มิถุนายน 2018, 10:36:04

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

pch081

ประเด็นคือ ผมต้องการทำเว็บไซต์ให้สามารถเปลี่ยน URL เป็นแบบนี้

www.aaa.cxm/contents/a/199966/ or contents/b/199966/ or contents/c/199966/ or ........

ซึ่งจากที่ศึกษามาหลายท่านบอกให้ลองทำ mod_rewrite ใน .htaccess แต่ผมลองทำแล้วยังทำไม่ได้

เลยอยากให้ช่วยเขียนคำสั่งนี้ให้ผมหน่อย หรือถ้ามีปลั๊กอินที่สามารถทำได้แนะนำหน่อยนะครับ

เว็บผมเป็น Wordpress

:wanwan031: :wanwan031:
อยากเล่นสนุกต้องเข้า[direct=http://www.xn--12c8dad3ba1d0f1e.com/]เกมส์สยาม[/direct] แหล่งรวมฮิต[direct=http://www.xn--12c8dad3ba1d0f1e.com/cat-7/%E0%B9%80%E0%B8%81%E0%B8%A1%E0%B8%AA%E0%B9%8C%E0%B8%88%E0%B8%B1%E0%B8%9A%E0%B8%84%E0%B8%B9%E0%B9%88/]เกมส์จับคู่[/direct]เกมส์รถแข่ง เกมส์ฟุตบอล และอีกมากมาย

pch081

ตอนนี้ผมเขียนไว้ประมาณ แต่มันก็ยังไม่ได้ ผิดถูกยังไงชี้แนะด้วยครับ

# 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>
อยากเล่นสนุกต้องเข้า[direct=http://www.xn--12c8dad3ba1d0f1e.com/]เกมส์สยาม[/direct] แหล่งรวมฮิต[direct=http://www.xn--12c8dad3ba1d0f1e.com/cat-7/%E0%B9%80%E0%B8%81%E0%B8%A1%E0%B8%AA%E0%B9%8C%E0%B8%88%E0%B8%B1%E0%B8%9A%E0%B8%84%E0%B8%B9%E0%B9%88/]เกมส์จับคู่[/direct]เกมส์รถแข่ง เกมส์ฟุตบอล และอีกมากมาย

pch081

อยากเล่นสนุกต้องเข้า[direct=http://www.xn--12c8dad3ba1d0f1e.com/]เกมส์สยาม[/direct] แหล่งรวมฮิต[direct=http://www.xn--12c8dad3ba1d0f1e.com/cat-7/%E0%B9%80%E0%B8%81%E0%B8%A1%E0%B8%AA%E0%B9%8C%E0%B8%88%E0%B8%B1%E0%B8%9A%E0%B8%84%E0%B8%B9%E0%B9%88/]เกมส์จับคู่[/direct]เกมส์รถแข่ง เกมส์ฟุตบอล และอีกมากมาย

shishior


GigBoT

อ้างถึงจาก: shishior ใน 14 มิถุนายน 2018, 14:17:03


ลองเปลี่ยนใน settings>>Permalinks แล้วรึยังคะ

ตามนี้เลยครับไม่ยากมากครับ
[direct=https://pscclinic.com/breast-surgery/]ทำนม[/direct] - คลินิกเสริมหน้าอก PSC อันดับ 1 ของไทย
[direct=https://www.moveonmarketing.com/seo]รับทำ SEO สายขาว[/direct] |
[direct=https://www.cz.co.th/seo]รับทำ SEO[/direct]
[direct=https://www.nitithamclinic.com/laser-tattoo-removal-nitithamclinic/]ลบรอยสัก[/direct] - เลเซอร์ลบรอยสัก Pico Laser เห็นผลจริง มีรีวิวการันตี
[direct=https://www.ssdhosting.in.th/]WordPress Hosting[/direct] - โฮสติ้งคุณภาพ ที่ออกแบบมาเพื่อเว็บไซต์แบบ WordPress โดนเฉพาะ

infamous

อ้างถึงจาก: pch081 ใน 13 มิถุนายน 2018, 11:19:54
ตอนนี้ผมเขียนไว้ประมาณ แต่มันก็ยังไม่ได้ ผิดถูกยังไงชี้แนะด้วยครับ

# 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

<?php var_dump($_GET);


7. ถ้ายังไม่ได้อีก ลองแนบโค๊ดแบบเต็มมาดูครับ เด๋วผมช่วยดูให้อีกที

ปล. ต้องขออภัยที่ยาวไปหน่อย คือผมต้องการให้เข้าใจ มากกว่าแค่เอาโค๊ดไปใช้งานครับ