ThaiSEOBoard.com

พัฒนาเว็บไซต์ => Programming => ข้อความที่เริ่มโดย: pch081 ที่ 13 มิถุนายน 2018, 10:36:04



หัวข้อ: เทคนิคการทำ mod_rewrite แบบนี้ ใครทำเป็นบ้าง ??
เริ่มหัวข้อโดย: pch081 ที่ 13 มิถุนายน 2018, 10:36:04
ประเด็นคือ ผมต้องการทำเว็บไซต์ให้สามารถเปลี่ยน URL เป็นแบบนี้

www.aaa.cxm/contents/a/199966/ (http://www.aaa.cxm/contents/a/199966/) or contents/b/199966/ or contents/c/199966/ or ........

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

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

เว็บผมเป็น Wordpress

 :wanwan031: :wanwan031:


หัวข้อ: Re: ผมต้องการทำ mod_rewrite รบกวนช่วยชี้แนะหน่อยครับ
เริ่มหัวข้อโดย: 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>


หัวข้อ: Re: เทคนิคการทำ mod_rewrite แบบนี้ ใครทำเป็นบ้าง ??
เริ่มหัวข้อโดย: pch081 ที่ 14 มิถุนายน 2018, 11:11:50
ขุดๆ ยังไม่ได้คำตอบ

 :wanwan031: :wanwan031:


หัวข้อ: Re: เทคนิคการทำ mod_rewrite แบบนี้ ใครทำเป็นบ้าง ??
เริ่มหัวข้อโดย: shishior ที่ 14 มิถุนายน 2018, 14:17:03
(https://www.picz.in.th/image/4gFZCf)

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


หัวข้อ: Re: เทคนิคการทำ mod_rewrite แบบนี้ ใครทำเป็นบ้าง ??
เริ่มหัวข้อโดย: GigBoT ที่ 14 มิถุนายน 2018, 14:20:45
(https://www.picz.in.th/image/4gFZCf)

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

ตามนี้เลยครับไม่ยากมากครับ


หัวข้อ: Re: ผมต้องการทำ mod_rewrite รบกวนช่วยชี้แนะหน่อยครับ
เริ่มหัวข้อโดย: infamous ที่ 14 มิถุนายน 2018, 15:30:40
ตอนนี้ผมเขียนไว้ประมาณ แต่มันก็ยังไม่ได้ ผิดถูกยังไงชี้แนะด้วยครับ

โค๊ด:
# 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. ถ้ายังไม่ได้อีก ลองแนบโค๊ดแบบเต็มมาดูครับ เด๋วผมช่วยดูให้อีกที

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