ThaiSEOBoard.com

ไทย เสียว บอร์ด => Tutorial (ห้ามตั้งคำถามห้องนี้) => หัวข้อเริ่มโดย: tosakp ใน 11 ธันวาคม 2006, 17:57:59

ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: tosakp ใน 11 ธันวาคม 2006, 17:57:59
20/12/2007:
ไม่ได้ Update นาน วันนี้ไปเจอข้อมูลเว็บภาษาไทย เห็นว่ามีประโยชน์ครับ
http://www.phpconcept.com/node/8


======================================

การแปลง URL โดยใช้ Mod_Rewrite

Mod_Rewrite คืออะไร?
Mod_Rewrite คือการแปลง URL ที่ดูยากให้อยู่ในรูปแบบที่เราต้องการ เพื่อประโยชน์หลายด้าน (ซึ่งจะกล่าวถึงต่อไป) และการแปลงเพื่อประโยชน์ด้าน SEO ก็เป็นอีกอันนึงที่มีการนำเอา Mod_Rewrite มาใช้ เพราะเรารู้กันดีว่า Search Engine ไม่ค่อยชอบ pages ที่เป็น dynamic ที่มี query string ยาวเฟื๊อย

ตัวอย่าง URL ที่ยาว และซับซ้อน
http://www.site.com/viewcatalog.asp?category=hats&prodID=53
เมื่อผ่านการแปลง เราสามารถทำให้สั้นลงได้ดังนี้
http://www.site.com/catalog/hats/53/

เริ่มทำ Mod_Rewrite
บาง Server ไม่สามารถจะทำ Mod_Rewrite ได้เนื่องจากไม่ได้ติดตั้ง Module Mod_Rewrite ดังนั้นถ้าเราจำเป็นต้องใช้ Mod_Rewrite ก็ต้องตรวจสอบดีๆก่อนเช่า host

.htaccess ไฟล์สำคัญในการทำ Mod_Rewrite
เราจะใช้ไฟล์นี้ในการกำหนด Rule ของการทำ Mod_Rewrite
เริ่มต้นด้วยคำสั่ง
อ้างถึงRewriteEngine on
เพื่อเปิดการทำงาน เขียนไว้ในบรรทัดแรกสุดของไฟล์

ต่อไปจะเป็นการนำเอา Mod_Rewrite ไปให้งาน ซึ่งผมจะเริ่มด้วยตัวอย่างง่ายๆ และเขียน Rewrite Rule ง่ายก่อน แล้วก็ยกตัวอย่างต่อไปเรื่อยๆนะครับ

ใช้ Mod_Rewrite ในการทำ Redirects
ถ้าเราต้องการเปลี่ยน location เก่า ไปที่ Location ใหม่แบบถาวร
อ้างถึงRewriteEngine on
RewriteRule ^old\.html$ new.html
ถ้าเราเขียนแบบนี้ เมื่อมีการใส่ url เป็น old.html มันก็จะถูกส่งไปที่ไพล์ new.html แต่ผู้เยี่ยมชมยังเห็น URL บน browser เป็น old.html อยู่เหมือนเดิม



อาจจะดูงงๆ อธิบายเพิ่มเติมดังนี้ RewriteRule จะประกอบด้วยกัน 3 ส่วน
1. Call to action RewriteRule  ขึ้นต้นบรรทัด กำหนดว่าบรรทัดนี้เป็น Rewrite Rule
2. Pattern  ^old\.html$ เป็นการตรวจสอบ URL ที่ใส่เข้ามาทาง Location Bar ของ Browser ซึ่งจะใช้ regex (Regular Expression) ในการตรวจสอบ (จะอธิบายเพิ่มเติมต่อไป)
3. Rewrite  new.html  เป็น URL ที่เราต้องการให้แปลงเป็นอันใหม่
หมายเหตุ: จริงๆมี 4 ส่วน แต่ในตัวอย่างเราใช้ 3 ส่วน

ขออธิบายในส่วนที่ 2 (Pattern) เพิ่มเติมดังนี้ ในส่วนนี้ประกอบด้วยเครื่องหมายสำคัญ 3 อย่างคือ
^old\.html$
- เครื่องหมาย The caret หรือ ^ เป็นการกำหนดจุดเริ่มต้น URL ที่อยู่ภายใต้ direcory ปัจจุบันที่เราจะตรวจสอบ ซึ่งก็คือ directory เดียวกับไฟล์ .htaccess 
- เครื่องหมาย The dollar sign หรือ  $ ซึ่งบอกจุดสิ้นสุดของการตรวจสอบ Pattern
- อีกเครื่องหมายนึงก็คือ The period หรือ . จุด ที่อยู่ข้างหน้านามสกุล html ซึ่งเครื่องหมาย จุด นั้นเป็นอักขระพิเศษ ใน regular expressions ซึ่งจะมีความหมายว่า แทนด้วยตัวอักษรใดๆ 1 ตัว (ดูเพิ่มเติมใน regular expressions ต่อจากนี้) แต่ในนี้เราจะตรวจสอบว่า ถ้า Pattern เป็น old.html หรือไม่ เราจึงต้องใส่ \ ซึ่งเป็น escape charactor ไว้ด้วย

เมื่อเราเขียนตามนี้ เมื่อผู้เยี่ยมชมเว็บกรอกมาเป็น old.html server ก็จะทำ  transparently redirect ไปที่ new.html โดยที่ผู้เยี่ยมชมเว็บไม่รู้ตัวว่าเป็นข้อมูลอันใหม่แล้ว เพราะ URL บน browser เป็น old.html อยู่เหมือนเดิม

แต่ถ้าเราต้องการให้ URL ที่ปรากฏบน browser เป็น new.html ด้วย เราก็เพียงแต่เติม [R] เข้าไปต่อท้ายบรรทัด ดังนี้
อ้างถึงRewriteRule ^old\.html$ new.html [R]
ซึ่ง [R] ก็คือ ส่วนที่ 4 ที่ผมบอกไว้ข้างบน
4. Command Flag [R] ซึ่งจะเป็นคำสั่งพิเศษกำหนดเงื่อนไขไว้ มีหลายคำสั่งซึ่งจะบอกไว้ตอนท้าย


การใช้ Regular Expressions
จะบอกว่า เป็นส่วนสำคัญที่สุดในการทำ Rewrite และมันก็ทำความความเข้าใจได้ยากพอควร ไม่ต้องห่วงครับ เดี๋ยวผมจะอธิบายเป็นขั้นตอน และยกตัวอย่างประกอบไปเรื่อยๆนะครับ

ตัวอย่างแรก
อ้างถึงRewriteRule ^products/([0-9][0-9])/$ productinfo.php?prodID=$1
จะเปลี่ยนจาก
อ้างถึงproductinfo.php?prodID=11 หรือ productinfo.php?prodID=99
ให้เป็น
อ้างถึงproducts/11/ หรือ products/99/

ดูที่ Pattern จะมีส่วนของที่อยู่ในปีกกาเหลี่ยม [ ]  เราเรียกว่า ranges
ในตัวอย่างจะเป็น [0-9] ซึ่งจะใช้ตรวจสอบว่าเป็นตัวอักษรที่อยู่ในช่วง 0-9 ใดๆ
เราสามารถตรวจสอบ ranges อื่นได้ เช่น [A-Z] ตรวจสอบว่าเป็นตัวอักษรตัวใหญ่ตั้งแต่ A-Z
[a-z] ก็เป็นการตรวสอบตัวเล็ก, ถ้า [A-Za-z] ก็ตรวจสอบว่าเป็นทั้งตัวใหญ่และตัวเล็ก เป็นต้น

และใน Pattern ก็จะมีส่วนที่อยู่ในวงเล็บ ( ) เป็นการเก็บค่าที่เราตรวจสอบพบ และตรงตามเงื่อนไข ซึ่งเราสามารถเอาค่านี้ ส่งไปให้ PHP ในส่วนของ Query String ได้ เราเรียกค่าที่ได้จากวงเล็บนี่ว่า back-reference
เราสามารถตรวจสอบและแยก back-reference ออกได้หลายๆอันใน URL อันเดียว (ดูตัวอย่างต่อๆไป) ซึ่ง back-reference ในวงเล็บแรก เวลาเราอ้างถึงเราก็จะใช้ $1 ส่วนลำดับต่อๆไป ก็จะเป็น $2, $3 ไปเรื่อยๆ

ดังนั้นผู้เยี่ยมชมเว็บ(หรือ bot ก็ได้)ก็จะเห็น url เป็น products/11/ หรือ products/99/ ซึ่ง สั้นและกระชับ โดยหารู้ไม่ว่า เราได้ซ่อน URL ที่ไม่ค่อยสวยงามและอ่านยากไว้เบื้องหลัง


......................... ต่อภาค 2 .....................

ใส่ / ต่อท้าย
บางครั้งผู้เยี่ยมชมเว็บ อาจจะพิมพ์ URL แค่  products/12 ซึ่งเมื่อเข้าไปตรวจสอบใน Pattern ด้านบน ก็จะไม่ตรง เพราะ Pattern ด้านบนจะต้องมี / ต่อท้ายด้วย มันจึงไม่ทำ transparently redirect ให้เรา
เราก็มีวิธีแก้เหตุการณ์แบบนี้ ซึ่งเราก็จะเขียน Rule ใหม่เพิ่มเข้าไปดังนี้
อ้างถึงRewriteRule ^products/([0-9][0-9])$ products/$1/ [R]
RewriteRule ^products/([0-9][0-9])/$ productinfo.php?prodID=$1
ดังนั้น เมื่อ Server ตรวจเจอ products/12 ก็จะเปลี่ยน URL เป็น products/12/ และแสดง URL ให้บน Browser ด้วย เพราะเราใส่ [R] ไว้ด้วย เมื่อเจอเงื่อนไขบรรทัดที่ 2 ก็เลยไม่มีปัญหาใดๆ ซึ่งมันก็จะส่งเป็น  transparently redirect ไปที่ productinfo.php?prodID=12 ตามความต้องการของเรา


การใช้ Match Quantifiers
จะเป็นว่าตัวอย่างข้างบน เรากำหนดเป็น ^products/([0-9][0-9])$ นั่นหมายความว่า ตัวเลขที่ตามหลัง  products/xx ต้องมี 2 ตัวเท่านั้น ซึ่งก็จะเป็นไปได้สูงสุดแค่ 99 แล้วกรณี productinfo.php?prodID=100 ล่ะจะทำอย่างไร?
ในกรณีนี้ เราสามารถใช้ Quantifiers เป็นตัวกำหนดได้ (Quantifiers มีหลายตัว จะอธิบายต่อไปเรื่อยๆ) ดังตัวอย่าง
อ้างถึงRewriteRule ^products/([0-9]+)$ products/$1/ [R]
เครื่องหมายบวก + แทนอักษรตั้งแต่ 1 ตัว ถึง n ตัว (ตั้งแต่ 1 ตัวขึ้นไป) ดังนั้น [0-9]+ ก็หมายความว่า เป็นตัวเลข 0-9 ตั้งแต่ 1 หลักขึ้นไป ถ้าเราใส่ products/1 หรือ products/1000 ก็สามารถ Match case นี้ได้แล้วครับ


เดี๋ยวมาต่อครับ...


อ้างถึงข้อมูลเพิ่มเติมของ  Rewrite Rule

RewriteRule


Regular expressions

Some hints about the syntax of regular expressions:

Text:
  . Any single character
  [chars] One  of chars
  [^chars] None of chars
  text1|text2 text1 or text2

Quantifiers:
  ? 0 or 1 of the preceding text
  * 0 or N of the preceding text (N > 0)
  + 1 or N of the preceding text (N > 1)

Grouping:
  (text) Grouping of text

Anchors:
  ^ Start of line anchor
  $ End of line anchor

Escaping:
  \ char escape that particular char



Pattern Matching metacharacter Definitions
\     Use before any of the following characters to escape or null the meaning or it. \* \. \$ \+ \[ \]
^    Start matching at this point
$    End point of the match
.    Any character
[]    Starts a range
|    Starts alternative match this|that would mean match this or that
()    starts a back reference point
?    match 0 or 1 time Quantifier
+    match atleast 1 or more times Quantifier
*    match 0 to infinite times Quantifier
{}    match minimum to maximum Quantifier {0,3} match up to 3 times


Range Definitions []
^     Negates the class. [^A-Z]+ means don't match any uppercases
\    Use before any of the following characters to escape or null the meaning or it. [\+]+
-    Range for matching [0-9]+ [a-zA-Z]+


Command Flag
[R]     Redirect you can add an =301 or =302 to change the type.
[F]    Forces the url to be forbidden. 403 header
[G]    Forces the url to be gone 401 header
[L]    Last rule. (You should use this on all your rules that don't link together)
[N]    Next round. Rerun the rules again from the start
[C]    Chains a rewrite rule together with the next rule.
[T]    use T=MIME-type to force the file to be a mime type
[NS]    Use if no sub request is requested
[NC]    Makes the rule case INsensitive
[QSA]    Query String Append use to add to an existing query string
[NE]    Turns of normal escapes that are default in the rewriterule
[PT]    Pass through to the handler (together with mod alias)
   Skip the next rule S=3 skips the next 3 rules
[E]    E=var sets an enviromental variable that can be called by other rules
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: win ใน 11 ธันวาคม 2006, 18:02:23
ขอบคุณคุณ tosakp มากๆ ครับ
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: danupol ใน 11 ธันวาคม 2006, 18:21:37
ขอบคุณมากๆ เลยครับ   (http://xs110.xs.to/xs110/06501/boy06dj7dt9.gif)
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: Puong ใน 11 ธันวาคม 2006, 18:31:21
มีประโยชน์ต่อผู้ไม่รู้อย่างผมมากเลย ขอบคุณครับ
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: Step9 ใน 11 ธันวาคม 2006, 18:40:32
Oh my Goodness!!

เชื่อว่าหลายๆคน ต่างก็ต้องการคนที่จะมาให้ความรู้ทางด้านโปรแกรมเมอร์
หรืออย่างน้อยเป็นที่ปรึกษา ทางด้านภาษาComputer ก็ยังดี

ยังไม่อยากจะหวังไปถึงห้อง"ไขปัญหาภาษาคอมฯ"ดอกนะครับ
(เพิ่งจะขอห้อง จดหมายเหตุจากGoogleไปหยกๆ แหะๆ)

แต่การเริ่มต้นแบบนี้นับเป็นสิ่งที่น่าชื่นชมยิ่งครับ ขอบคุณครับ :P
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: golf98765 ใน 11 ธันวาคม 2006, 18:44:47
สุดยอดอีกแล้วครับท่าน หุหุ

ขอบคุณมักๆ
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: jane ใน 11 ธันวาคม 2006, 18:57:32
ขอบคุณม๊ากกกกกกค่ะ คุณ tosakp

เครื่องหมายเต็มไปหมดเลย - -'

มีอยู่เครื่องหมายนึงที่ชอบมากเป็นพิเศษ
อ้างถึง$$$$$$$$$
:wink:
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: Warrez ใน 11 ธันวาคม 2006, 18:58:57
ขอบคุณมากๆคับพี่ต่อ :D
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: August(ซิง) ใน 11 ธันวาคม 2006, 20:45:20
รักพี่ต่อจริง จริ๊ง ขอบคุณคร้าบ
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: xex ใน 11 ธันวาคม 2006, 21:18:15
ขอบคุณก่อน แล้วค่อยศึกษาทีหลัง คร๊าลบๆๆๆ
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: EThaiZone ใน 12 ธันวาคม 2006, 00:25:36
ดีเลยครับที่มาเขียนแบบนี้ (ผมได้อ่านด้วย  :D  )

เหอๆ ถ้าผมมีเวลาก็อยากมาเขียนให้เหมือนกัน  :(
แต่เขียนได้ละเอียดกว่าที่ผมรู้อีก
โดยเฉพาะ Command Flag อันนี้ผมไม่รู้เลย
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: youcanberich ใน 12 ธันวาคม 2006, 00:53:24
ขอบคุณมากครับกระจ่างเลยครับ ไม่ต้องไปหาอ่านที่ไหนแล้วว :D  :D  :D
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: pook ใน 12 ธันวาคม 2006, 01:32:34
ขอบคุณพี่ต่อครับ เยี่ยมจริงๆ

ปุ๊ก
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: xex ใน 21 ธันวาคม 2006, 15:59:28
วันนี้จะได้ใช้แล้ว
มีเรื่องตลกครับ ผมไป search หาใน Google และ ระบุว่าในไทย ปรากฏว่า Google บอกมาหน้านี้ในลำดับต้นๆ เหอะๆ เรียกว่า ไม่ต้องไปไหนไกลเลยครับ สุดท้่ายก็ต้องกลับมาหาความรู้ที่ละเีอียดแบบยิบ ใน thaiseo นี่แหละ

ิแต่ใน thai seo นี่ติดอย่างเดียว หายากมากๆ ให้ตรงประเด็น ผมพยายาม search หา มันไม่เจอแบบตรง ถ้า คำเดียว OK แต่หลายๆคำเริ่มร่วน ครับ

เข้าเืรื่องดีกว่าครับ
Files ทีว่านี้เขียน ใส่ในไหนครับ ผมเข้าใจว่า ใน .htaccess ของ host แต่มันเขียนยังไง

ใช้ nodepad เขียนเลยเหรอครับ แล้วก็ Upload ไป ถูกไหม

server hostforseo ใช้ได้ไหม เห็นมี Files นี้อยู่แต่ผมไม่เคยทำอะไรเลยอ่ะ

ขอบคุณครับ :D
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: EThaiZone ใน 21 ธันวาคม 2006, 16:09:56
ถูกครับ ใช้ notepad ก็ได้แล้วเขียนเลย
อัพใส่จะมีผลกับโฟลเดอร์ที่วางไว้ และซัพโฟลเดอร์ที่อยู่ข้างในด้วยครับ  :D
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: tosakp ใน 21 ธันวาคม 2006, 16:46:17
อ้างถึงจาก: xexแต่ใน thai seo นี่ติดอย่างเดียว หายากมากๆ ให้ตรงประเด็น ผมพยายาม search หา มันไม่เจอแบบตรง ถ้า คำเดียว OK แต่หลายๆคำเริ่มร่วน ครับ

เรื่องของการใช้ฟังก์ชั่นค้นหา ด้านบน ของ PHPBB นั้นต้องแก้ script ให้มันหาแบบไทยๆหน่อยน่ัะครับ
ตอนนี้มันหาแบบฝรั่ง คือมันใช้ Space เป็นตัวแยกคำ ทำให้เรามักจะหาไม่เจอ
เช่น ถ้าเราพิมพ์คำว่า "เสียวบอร์ด" ในคำค้น
จะไม่เจอคำว่า "ไทยเสียวบอร์ดแหล่งรวมคนชอบ SEO"
แต่ถ้ากระทู้ไหนมีคำว่า "ไทย เสียวบอร์ด แหล่งรวมคนชอบ SEO"
ประมาณนี้

ก็เลยทำให้ใช้ประโยชน์จากฟังก์ชั่นการค้นหาได้ไม่เต็มที่

ถ้าได้แก้ script PHPBB นิดนึงนะ จะจ๊าบมากๆเลยล่ะครับพี่น้อง

ต้องแจ้งคุณพิซซ่ามั๊งครับ
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: mv ใน 21 ธันวาคม 2006, 20:52:15
คุณ tosakp ผมสนใจมากเลย ลองเอาไปใช้แล้วได้ประโยชน์มากเลยครับ

แต่ผมติดอยู่นิดนึงคือคำสั่ง [R] เหมือนมันไม่ทำงานอะครับ ผมไม่อยากให้ user ต้องพิมพ์ / ตามหลัง url ผมเลยใช้วิธีที่คุณบอก แต่พอใส่ [R] ก็เข้าหน่า errer เลยอะคับ

RewriteEngine on
RewriteRule ^(.*)/$ blog/user.php?username=$1 [L]


อันนี้เวลาพิมพ์ต้อง www.domanname.com/sompong/

แต่อยากเอาแค่นี้  www.domanname.com/sompong

มีวิธีรึปล่าวคับ
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: Step9 ใน 21 ธันวาคม 2006, 21:27:57
ระหว่างเขียนเองกับ ใช้เว็บแปลงนี่ได้ผลOKเหมือนกันไหมครับ
http://www.thaiseoboard.com/viewtopic.php?t=3993&highlight=tiny
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: tosakp ใน 21 ธันวาคม 2006, 23:42:28
อ้างถึงจาก: mvคุณ tosakp ผมสนใจมากเลย ลองเอาไปใช้แล้วได้ประโยชน์มากเลยครับ

แต่ผมติดอยู่นิดนึงคือคำสั่ง [R] เหมือนมันไม่ทำงานอะครับ ผมไม่อยากให้ user ต้องพิมพ์ / ตามหลัง url ผมเลยใช้วิธีที่คุณบอก แต่พอใส่ [R] ก็เข้าหน่า errer เลยอะคับ

RewriteEngine on
RewriteRule ^(.*)/$ blog/user.php?username=$1 [L]


อันนี้เวลาพิมพ์ต้อง www.domanname.com/sompong/

แต่อยากเอาแค่นี้  www.domanname.com/sompong

มีวิธีรึปล่าวคับ


ลองดูอันนี้ดูนะครับ
อ้างถึงrewriteEngine on
rewriteBase /
rewriteCond %{REQUEST_URI} !/$
rewriteCond %{REQUEST_URI} !\.
rewriteRule ^(.+)$ blog/user.php?username=$1
rewriteRule ^(.+)/$ blog/user.php?username=$1
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: thaiseodev ใน 21 ธันวาคม 2006, 23:52:52
อ้างถึงจาก: tosakp
อ้างถึงจาก: mvคุณ tosakp ผมสนใจมากเลย ลองเอาไปใช้แล้วได้ประโยชน์มากเลยครับ

แต่ผมติดอยู่นิดนึงคือคำสั่ง [R] เหมือนมันไม่ทำงานอะครับ ผมไม่อยากให้ user ต้องพิมพ์ / ตามหลัง url ผมเลยใช้วิธีที่คุณบอก แต่พอใส่ [R] ก็เข้าหน่า errer เลยอะคับ

RewriteEngine on
RewriteRule ^(.*)/$ blog/user.php?username=$1 [L]


อันนี้เวลาพิมพ์ต้อง www.domanname.com/sompong/

แต่อยากเอาแค่นี้  www.domanname.com/sompong

มีวิธีรึปล่าวคับ


ลองดูอันนี้ดูนะครับ
อ้างถึงrewriteEngine on
rewriteBase /
rewriteCond %{REQUEST_URI} !/$
rewriteCond %{REQUEST_URI} !\.
rewriteRule ^(.+)$ blog/user.php?username=$1
rewriteRule ^(.+)/$ blog/user.php?username=$1

URL แบบมี / ปิดท้าย ดีที่สุดนะครับ ฝึกพิมพ์ให้ติดไว้ :P
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: UnzO ใน 14 มกราคม 2007, 22:30:33
มีปัญหานิดหน่อยครับ คือ เมื่อเรา rewrite ใหม่แล้ว พวกรูปทั้งหลายที่เราใส่ไว้ว่า "img/pic01.jpg" มันจะไม่ออก ทำให้เราต้องเปลี่ยน url ของรูปใหม่ทั้งหมดใน src ไฟล์ ซึ่งหากเป้นเว็บใหญ่ๆ ก็จะเวลาพอสมควร (จิงๆ แล้วมันใช้ Find Replace ได้ แต่เราก็ต้องตรวจด้วยตาอีกเพื่อความแน่นอน)
จึงอยากจะสอบถามว่า มันพอมีทางแก้ในการเขียนรึป่าวครับ ผมแค่สงสัยหน่ะครับ ว่าเราต้องแก้แบบนี้ทุกครั้งรึป่าวครับ

ส่วนอีกข้อคือ ระหว่าง http://www.domain.com/magician/Criss%20Angle/7/ และ http://localhost/magician/Criss-Angle/7/  อันไหนจะมีดีหรือผมเสียกันแค่ไหน หรือไม่มีผล ครับ
และเราสามารถแก้ในการ rewrite ได้รึป่าวครับ ว่าถ้าเจอ ช่องว่างให้เปลี่ยนเป้น - หรือเราต้องใช้ php เขียน

ขอบคุณครับ อาจถามเยอะไปหน่อยนะ แหะๆ
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: EThaiZone ใน 14 มกราคม 2007, 23:41:57
ต้องทำใน php ครับ มีหลายวิธี
อันนี้แล้วแต่บุคคลครับ

ส่วนเรื่องปัญหาการอ้างถึงรูป
แก้ได้ด้วยการเรียกแบบ full url ครับ
ทำกับทุกรูปเลย
และความจริงอยากให้ดี ทำ full url กับลิงค์ภายในก็ดีครับ
จะช่วยให้ search engine เข้าใจง่ายขึ้นครับ

อาจจะมีผลกับเรื่องอินเด็กด้วยน้า  :wink:
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: UnzO ใน 15 มกราคม 2007, 01:24:43
ขอบคุณครับ ว่าแต่ท่าน EthaiZone เนี้ย มีเมลล์ผมด้วยนี้นา ไม่ยักรู้ว่าอยู่บอร์ดนี้ด้วย (แบบว่าไม่ค่อยได้เข้ามาหาความรู้เท่าไหร่ ช่วงนี้เซ้งเซ็ง คนรักจากไป :cry: )

ปล. ในเมลล์ท่านมี UnzO Corporation ป่ะครับ  :?:
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: hurahura ใน 07 กุมภาพันธ์ 2007, 17:12:51
ขอจะถามหน่อยครับว่าเราจะรู้ได้ยังไงว่า Host มันใช้ได้หรือเปล่า
ผลลงโทรไปถาม คุยกันตั้งนานกว่าจะรู้เรื่อง เพราะไม่รู้ว่าจะเรียกมันว่าอะไร
เรียกว่า Mod_Rewrite ไม่เห็นเขารู้จักเลย ต้องนั่งอธิบาย
สุดท้ายเขาให้เข้าไปดูที่ phpinfo ที่ตรง url_rewriter.tags
ซึ่งผมก็ไม่รู้ว่ามันคืออย่างเดียวกันหรือเปล่า
นี่ดีนะลองถามจากเว็บ host ของไทย ถ้าของฝรั่งจะคุยยังไงเนี่ย

จึงอยากทราบครับว่ามีวิธีดูตรงไหน ว่าโฮสนั่นๆ สามารถใช้ได้
มันจะใช้ได้เฉพาะลีนุกหรือเปล่า หรือไม่เกี่ยวกัน
หรือถ้าต้องโทรถามจริงๆ จะถามว่าอย่างไรให้เข้าใจตรงกัน

ขอบคุณครับ
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: kingmaster ใน 07 กุมภาพันธ์ 2007, 17:21:51
อ้างถึงจาก: hurahuraขอจะถามหน่อยครับว่าเราจะรู้ได้ยังไงว่า Host มันใช้ได้หรือเปล่า
ผลลงโทรไปถาม คุยกันตั้งนานกว่าจะรู้เรื่อง เพราะไม่รู้ว่าจะเรียกมันว่าอะไร
เรียกว่า Mod_Rewrite ไม่เห็นเขารู้จักเลย ต้องนั่งอธิบาย
สุดท้ายเขาให้เข้าไปดูที่ phpinfo ที่ตรง url_rewriter.tags
ซึ่งผมก็ไม่รู้ว่ามันคืออย่างเดียวกันหรือเปล่า
นี่ดีนะลองถามจากเว็บ host ของไทย ถ้าของฝรั่งจะคุยยังไงเนี่ย

จึงอยากทราบครับว่ามีวิธีดูตรงไหน ว่าโฮสนั่นๆ สามารถใช้ได้
มันจะใช้ได้เฉพาะลีนุกหรือเปล่า หรือไม่เกี่ยวกัน
หรือถ้าต้องโทรถามจริงๆ จะถามว่าอย่างไรให้เข้าใจตรงกัน

ขอบคุณครับ

ถ้าเป็น apache ใช้ได้ชัวน์ครับ แต่เค้าต้องเปิดใช้งาน mod_rewrite ในไฟล์ httpd.conf ก่อนครับ

บอกให้เค้าหาบรรทัดนี้
#LoadModule rewrite_module modules/mod_rewrite.so
แล้วเอาเครื่องหมาย # ด้านหน้าออก save แล้ว restart apache แค่นี้ก็ใช้ได้ละครับ
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: ColdMoney ใน 07 กุมภาพันธ์ 2007, 17:53:37
ขอบคุณมากครับ เดี๋ยวจะกลับมาอ่านให้จบ  :P  :P
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: akibara ใน 12 มีนาคม 2007, 20:43:33
rewriteCond %{REQUEST_URI} !/$
rewriteCond %{REQUEST_URI} !\.
rewriteRule ^(.+)/(.+)$ index.php?category=$1&sub=$2
rewriteRule ^(.+)/(.+)/$ index.php?category=$1&sub=$2


ไม่ทราบว่าผิดยังไงเหรอครับ คือมันขึ้นแต่ $2 ส่วน $1 ว่าง
คือผมจะแปลงเป็นงี้อะคับ สมมุติ
/blog/diary
ให้มาเอา blog มาเป็น $1
ส่วน diary มาเป็น $2 อย่างงี้อะคับ

เพราะถ้าทำแบบนี้ มันจะเอามาเฉพาะ diary ส่วน blog จะไม่ถูกดึงมาด้วย

ขอบคุณมากฮะ
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: aomnaruk ใน 17 เมษายน 2007, 14:27:33
แล้วถ้า URL หลัง REwrite มีเครื่องหมาย "+" จะพิมพ์คำสั่งยังไงครับ
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: Tee++; ใน 17 เมษายน 2007, 15:48:05
อ้างถึงจาก: aomnarukแล้วถ้า URL หลัง REwrite มีเครื่องหมาย "+" จะพิมพ์คำสั่งยังไงครับ

\+
ชื่อเรื่อง: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: EThaiZone ใน 17 เมษายน 2007, 20:08:07
อ้างถึงจาก: UnzOขอบคุณครับ ว่าแต่ท่าน EthaiZone เนี้ย มีเมลล์ผมด้วยนี้นา ไม่ยักรู้ว่าอยู่บอร์ดนี้ด้วย (แบบว่าไม่ค่อยได้เข้ามาหาความรู้เท่าไหร่ ช่วงนี้เซ้งเซ็ง คนรักจากไป :cry: )

ปล. ในเมลล์ท่านมี UnzO Corporation ป่ะครับ  :?:

มีครับๆ

ผมก็เพิ่งรู้ว่าทั่นอยู่ในบอร์ดด้วยเหมือนกัน  :lol:

สำหรับท่านๆ ที่ไม่เข้าใจเรื่อง rewrite
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: hurahura ใน 15 พฤษภาคม 2007, 21:15:36
ต้งอไป set อะไรก่อนหรือเปล่าครับ ถึงจะใช้ได้
ทำไมทำแล้วไม่เห็นเกิดอะไรขึ้นเลย

ใช้ hostmonster
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: joe ใน 03 กันยายน 2007, 07:52:40
ขอขุดหน่อยครับ ไม่รู้ว่า .htaccess มันจะช่วยได้ป่าว

คือสมมติผมมีข้อมูลเก็บอยู่ที่ subdirectory ของ root อะครับ ประมาณแบบนี้
อ้างถึง/home/userid/public_html/joeimages/1/header.gif
/home/userid/public_html/joeimages/1/bg.gif
/home/userid/public_html/joeimages/1/border.gif
/home/userid/public_html/joeimages/1/footer.gif

/home/userid/public_html/joeimages/2/header.gif
/home/userid/public_html/joeimages/2/bg.gif
/home/userid/public_html/joeimages/2/border.gif
/home/userid/public_html/joeimages/2/footer.gif

/home/userid/public_html/joeimages/3/header.gif
/home/userid/public_html/joeimages/3/bg.gif
/home/userid/public_html/joeimages/3/border.gif
/home/userid/public_html/joeimages/3/footer.gif

ถ้ามีการเรียก url hxxp://www.addondomain.com/joeimages/1/bg.gif
แล้วผมต้องการให้มันไปดึงข้อมูลมาจาก path ตามด้านบนอะครับ

คือตอนนี้ผมเขียนให้มันเรียกได้แล้ว แบบนี้
อ้างถึงOptions +FollowSymLinks
RewriteEngine on
RewriteRule ^joeimages/([0-9]+)/(.*)$ hxxp://www.maindomain.com/joeimages/$1/$2

แต่มันมีปัญหาตรงที่ว่า ผมเข้าไปเช็คดูในโฮส ปรากฎว่ามันเปลือง bandwidth มากเลยครับ
เพราะมันเหมือนเรียก ผ่าน browser ทุกครั้งเลย
ผมเลยอยากเปลี่ยนให้มันเรียกผ่าน path ตรงๆ เลยจะเขียนยังไงครับ

เลยลองเปลี่ยนเป็นแบบนี้ แต่ลองแล้วมันเรียกไม่ได้อะครับ
อ้างถึงOptions +FollowSymLinks
RewriteEngine on
RewriteRule ^joeimages/([0-9]+)/(.*)$ /home/userid/public_html/joeimages/$1/$2


คำถามครับ
.htaccess มันเขียนให้ไปดึงข้อมูลจาก path ที่ต้องการมาตรงๆเลยได้มั้ยครับ ??


คือผมไม่อยากสร้าง directory จริงๆให้กับ addondomain อะครับ
ข้อมูลมันเยอะ เวลามีการแก้ไขทีต้อง copy แก้กันนานเลย
:-*
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: ttk ใน 05 พฤศจิกายน 2007, 18:22:28
ผมลอง แบบง่ายที่สุดอ่ะครับ คือสร้างไฟล์ไว้สองตัว a.html กับ b.html แล้วเขียนใน  .htaccess ยังงี้อ่ะครับ
RewriteEngine on
RewriteRule ^a\.html$ b.html
แล้ววางไฟล์ .htaccess ไว้ใน folder เดียวกันกับไฟล์ทั้งสองตัว
จากนั้น พอลองเข้าไปที่ a.html มันขึ้น error ว่ายังงี้น่ะครับ

Server error!
The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there was an error in a CGI script.

If you think this is a server error, please contact the webmaster.

Error 500
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: EThaiZone ใน 05 พฤศจิกายน 2007, 18:52:20
ตอบคุณ hurahura

ลองติดต่อซัพพอร์ทดูครับ ผมเองก็ไม่เคยใช้ hostmonster ครับ




ตอบคุณ Joe

ใช้แบบนี้แทนครับ

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^joeimages/([0-9]+)/(.*)$ joeimages/$1/$2

แต่ผมก็ไม่เข้าใจว่าจะรีไรท์ไปทำไม  :P

ส่วนที่ถามว่าดึงโดยตรงได้ไหม ได้ครับ




ตอบคุณ  ttk
เข้าใจว่ามันหาไฟล์ b.html ไม่เจอ ไม่ก็เป็นที่เซอเวอร์
ลองติดต่อซัพพอร์ทให้ช่วยดูก็ได้ครับ เพราะขึ้นอยู่กับตำแหน่งโฟลเดอร์ด้วย (ในบางที)

ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: joe ใน 05 พฤศจิกายน 2007, 20:00:04
คุณ ethaizone คงเข้าใจผิดอะครับ

/home/userid/public_html/joeimages/1/header.gif

ตรงนี้มันอยู่ในส่วนของ main-domain นะครับ
เพราะฉะนั้น path url จริงๆ ของมันก็จะเป็น http://www.main-domain.com/joeimages/1/header.gif

แต่ที่ผมต้องการคือเรียกผ่าน addon-domain
http://www.addon-domain.com/joeimages/1/header.gif


โดยที่ folder ของ addon-domain นั้นมันไม่มี directory joeimages อยู่จริงๆ
จะให้มันไปดึงจาก /home/userid/public_html/joeimages/1/header.gif

ว่าง่ายๆก็คือ ผมจะให้ folder joeimages ร่วมกันทั้งหมด ทุกๆโดเมนในโฮสนะครับ


แต่ตอนนี้ไม่ได้ใช้แระ เวบปั่นโดนแบน สมัครใหม่ยังไม่ผ่านเลย  :P
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: Dr.K ใน 05 พฤศจิกายน 2007, 20:57:48
ให้ server หลัก มี
Alias เป็นชื่อserver รองสิครับ
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: EThaiZone ใน 06 พฤศจิกายน 2007, 08:46:12
อ้างถึงจาก: joe ใน 05 พฤศจิกายน 2007, 20:00:04
คุณ ethaizone คงเข้าใจผิดอะครับ

/home/userid/public_html/joeimages/1/header.gif

ตรงนี้มันอยู่ในส่วนของ main-domain นะครับ
เพราะฉะนั้น path url จริงๆ ของมันก็จะเป็น http://www.main-domain.com/joeimages/1/header.gif

แต่ที่ผมต้องการคือเรียกผ่าน addon-domain
http://www.addon-domain.com/joeimages/1/header.gif


โดยที่ folder ของ addon-domain นั้นมันไม่มี directory joeimages อยู่จริงๆ
จะให้มันไปดึงจาก /home/userid/public_html/joeimages/1/header.gif

ว่าง่ายๆก็คือ ผมจะให้ folder joeimages ร่วมกันทั้งหมด ทุกๆโดเมนในโฮสนะครับ


แต่ตอนนี้ไม่ได้ใช้แระ เวบปั่นโดนแบน สมัครใหม่ยังไม่ผ่านเลย  :P

อ้อครับ คงเป็น hostgator งั้นก็

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^joeimages/([0-9]+)/(.*)$ ../joeimages/$1/$2
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: paradox_073 ใน 06 พฤศจิกายน 2007, 09:08:46
 :) เยี่ยมมากเลย  :D
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: tosakp ใน 20 ธันวาคม 2007, 16:13:33
20/12/2007:
ไม่ได้ Update นาน วันนี้ไปเจอข้อมูลเว็บภาษาไทย เห็นว่ามีประโยชน์ครับ
http://www.phpconcept.com/node/8

เกี่ยวกับ regexp ซึ่งต้องใช้บ้างในการทำ URL Rewrite
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: thaidesigner ใน 12 กรกฎาคม 2008, 02:32:34
 :P ขอบคุณมาก กำลังมึนเลย บอรืดตัวเองเจ๊ง เพราะไปลงตัวนี้ครับ [url]http://www.phpbb-seo.com/boards/simple-seo-url-vf60/[/url] แต่มันดันไม่สมบูรณ์อ่ะครับ  :-X
แถมตีมที่ใช้ดันไม่มีซับพอร์ทอีก  :P
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: etgsgroup ใน 12 กรกฎาคม 2008, 09:04:46
ขอบคุณที่ขุดมานะครับ ผมก็กำลังมึน ๆ กับ mod_rewrite พอดีครับ
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: wisan.n ใน 14 มิถุนายน 2009, 23:06:30
ใครรู้บ้างว่า จะเอา page title  มา Rewrite เป็นชื่อไฟล์
เช่น
้http://www.demo.com/text.php     --->  page titile เป็น   "pagetitle นะคับ"

ไปเป็น
้http://www.demo.com/pagetitle-นะคับ.html

:-*
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: kanate ใน 16 มิถุนายน 2009, 09:04:43
อ่านแล้วมึนเหมือนกันครับ ...

ขอบคุณสำหรับบทความดีๆ ครับ  :D
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: Webstory ใน 16 มิถุนายน 2009, 09:57:36
ขอบคุณครับ กำลังจะหัดเขียน .htaccess พอดีเลย
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: yyy ใน 16 มิถุนายน 2009, 11:30:10
มึนต้วยคน ขอศึกษาเพิ่มอีกหน่อย

ขอบคุณครับ
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: nbaboyz ใน 18 มกราคม 2011, 11:15:52
ผมเขียนแบบนี้



RewriteRule ^([^/]*)\.html$ /atical_read.php?no=$1 [L]


เวลาเรียกใช้งาน http://www.mysite.com/1.html ได้ครับ

แต่มันไปซ้ำกับส่วนอื่นอยากให้ มันเป็น

http://www.mysite.com/atical/1.html

ต้องทำยังไงอ่ะครับ

ขอบคุณล่วงหน้าครับ
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: mzchewiize ใน 07 สิงหาคม 2011, 23:08:57
ขุดหน่อยยย เข้ามาจดดๆๆๆ
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: cs731 ใน 07 สิงหาคม 2011, 23:36:39
ความรู้ล้วน............อิอิ
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: inmysmallroom ใน 22 มกราคม 2012, 19:22:45
วันนี้เสิร์ชหาบทความดีๆเรื่อง mod-rewrite เจอกระทู้นี้ ขอเก็บไว้อ่านก่อน ขอบคุณมากค่ะ  :wanwan017:
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: huyhuy122 ใน 10 กุมภาพันธ์ 2012, 00:46:34
ขอบคุณครับ
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: creditonhand ใน 31 พฤษภาคม 2012, 16:34:50
แล้วถ้าเป็นภาษา asp ต้องแปลงงัยค่ะใครรู้บ้าง
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: piranon ใน 17 มิถุนายน 2012, 18:46:25
ขอบคุณครับผม :wanwan017:
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: forceinw ใน 07 กรกฎาคม 2012, 22:37:16
 :wanwan020: Thanks
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: LoveDead ใน 07 กรกฎาคม 2012, 23:00:40
ขอบคุณมากครับ  :wanwan017:
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: SumaYi ใน 07 กรกฎาคม 2012, 23:31:14
เป็นการขุดที่มีประโยชน์  :wanwan017:
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: jommann ใน 25 กุมภาพันธ์ 2015, 14:37:24
พอดีผมเข้ามาอ่านแล้ว อยากจะต่อยอดคำถามอีกนิดคับ ถ้าผมต้องการจะ rewrite จาก

htt://domainname/seminar  ให้เป็น  htt://domainname/สัมมนา

ลิงค์ไปยัง ที่เดียวกัน

ต้องทำยังงััย รบกวน ผู้รู้ด้วยน่ะครับ
ชื่อเรื่อง: Re: การแปลง URL โดยใช้ Mod_Rewrite
โพสต์โดย: fielddev ใน 07 เมษายน 2015, 22:54:59
ขอบคุณมากครับ :'(