20/12/2007:
ไม่ได้ Update นาน วันนี้ไปเจอข้อมูลเว็บภาษาไทย เห็นว่ามีประโยชน์ครับ
http://www.phpconcept.com/node/8
======================================
การแปลง URL โดยใช้ Mod_RewriteMod_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
ขอบคุณคุณ tosakp มากๆ ครับ
ขอบคุณมากๆ เลยครับ (http://xs110.xs.to/xs110/06501/boy06dj7dt9.gif)
มีประโยชน์ต่อผู้ไม่รู้อย่างผมมากเลย ขอบคุณครับ
Oh my Goodness!!
เชื่อว่าหลายๆคน ต่างก็ต้องการคนที่จะมาให้ความรู้ทางด้านโปรแกรมเมอร์
หรืออย่างน้อยเป็นที่ปรึกษา ทางด้านภาษาComputer ก็ยังดี
ยังไม่อยากจะหวังไปถึงห้อง"ไขปัญหาภาษาคอมฯ"ดอกนะครับ
(เพิ่งจะขอห้อง จดหมายเหตุจากGoogleไปหยกๆ แหะๆ)
แต่การเริ่มต้นแบบนี้นับเป็นสิ่งที่น่าชื่นชมยิ่งครับ ขอบคุณครับ :P
สุดยอดอีกแล้วครับท่าน หุหุ
ขอบคุณมักๆ
ขอบคุณม๊ากกกกกกค่ะ คุณ tosakp
เครื่องหมายเต็มไปหมดเลย - -'
มีอยู่เครื่องหมายนึงที่ชอบมากเป็นพิเศษ
อ้างถึง$$$$$$$$$
:wink:
ขอบคุณมากๆคับพี่ต่อ :D
รักพี่ต่อจริง จริ๊ง ขอบคุณคร้าบ
ขอบคุณก่อน แล้วค่อยศึกษาทีหลัง คร๊าลบๆๆๆ
ดีเลยครับที่มาเขียนแบบนี้ (ผมได้อ่านด้วย :D )
เหอๆ ถ้าผมมีเวลาก็อยากมาเขียนให้เหมือนกัน :(
แต่เขียนได้ละเอียดกว่าที่ผมรู้อีก
โดยเฉพาะ Command Flag อันนี้ผมไม่รู้เลย
ขอบคุณมากครับกระจ่างเลยครับ ไม่ต้องไปหาอ่านที่ไหนแล้วว :D :D :D
ขอบคุณพี่ต่อครับ เยี่ยมจริงๆ
ปุ๊ก
วันนี้จะได้ใช้แล้ว
มีเรื่องตลกครับ ผมไป search หาใน Google และ ระบุว่าในไทย ปรากฏว่า Google บอกมาหน้านี้ในลำดับต้นๆ เหอะๆ เรียกว่า ไม่ต้องไปไหนไกลเลยครับ สุดท้่ายก็ต้องกลับมาหาความรู้ที่ละเีอียดแบบยิบ ใน thaiseo นี่แหละ
ิแต่ใน thai seo นี่ติดอย่างเดียว หายากมากๆ ให้ตรงประเด็น ผมพยายาม search หา มันไม่เจอแบบตรง ถ้า คำเดียว OK แต่หลายๆคำเริ่มร่วน ครับ
เข้าเืรื่องดีกว่าครับ
Files ทีว่านี้เขียน ใส่ในไหนครับ ผมเข้าใจว่า ใน .htaccess ของ host แต่มันเขียนยังไง
ใช้ nodepad เขียนเลยเหรอครับ แล้วก็ Upload ไป ถูกไหม
server hostforseo ใช้ได้ไหม เห็นมี Files นี้อยู่แต่ผมไม่เคยทำอะไรเลยอ่ะ
ขอบคุณครับ :D
ถูกครับ ใช้ notepad ก็ได้แล้วเขียนเลย
อัพใส่จะมีผลกับโฟลเดอร์ที่วางไว้ และซัพโฟลเดอร์ที่อยู่ข้างในด้วยครับ :D
อ้างถึงจาก: xexแต่ใน thai seo นี่ติดอย่างเดียว หายากมากๆ ให้ตรงประเด็น ผมพยายาม search หา มันไม่เจอแบบตรง ถ้า คำเดียว OK แต่หลายๆคำเริ่มร่วน ครับ
เรื่องของการใช้ฟังก์ชั่นค้นหา ด้านบน ของ PHPBB นั้นต้องแก้ script ให้มันหาแบบไทยๆหน่อยน่ัะครับ
ตอนนี้มันหาแบบฝรั่ง คือมันใช้ Space เป็นตัวแยกคำ ทำให้เรามักจะหาไม่เจอ
เช่น ถ้าเราพิมพ์คำว่า "เสียวบอร์ด" ในคำค้น
จะไม่เจอคำว่า "ไทยเสียวบอร์ดแหล่งรวมคนชอบ SEO"
แต่ถ้ากระทู้ไหนมีคำว่า "ไทย เสียวบอร์ด แหล่งรวมคนชอบ SEO"
ประมาณนี้
ก็เลยทำให้ใช้ประโยชน์จากฟังก์ชั่นการค้นหาได้ไม่เต็มที่
ถ้าได้แก้ script PHPBB นิดนึงนะ จะจ๊าบมากๆเลยล่ะครับพี่น้อง
ต้องแจ้งคุณพิซซ่ามั๊งครับ
คุณ tosakp ผมสนใจมากเลย ลองเอาไปใช้แล้วได้ประโยชน์มากเลยครับ
แต่ผมติดอยู่นิดนึงคือคำสั่ง [R] เหมือนมันไม่ทำงานอะครับ ผมไม่อยากให้ user ต้องพิมพ์ / ตามหลัง url ผมเลยใช้วิธีที่คุณบอก แต่พอใส่ [R] ก็เข้าหน่า errer เลยอะคับ
RewriteEngine on
RewriteRule ^(.*)/$ blog/user.php?username=$1 [L]
อันนี้เวลาพิมพ์ต้อง www.domanname.com/sompong/
แต่อยากเอาแค่นี้ www.domanname.com/sompong
มีวิธีรึปล่าวคับ
ระหว่างเขียนเองกับ ใช้เว็บแปลงนี่ได้ผลOKเหมือนกันไหมครับ
http://www.thaiseoboard.com/viewtopic.php?t=3993&highlight=tiny
อ้างถึงจาก: 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
อ้างถึงจาก: 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
มีปัญหานิดหน่อยครับ คือ เมื่อเรา rewrite ใหม่แล้ว พวกรูปทั้งหลายที่เราใส่ไว้ว่า "img/pic01.jpg" มันจะไม่ออก ทำให้เราต้องเปลี่ยน url ของรูปใหม่ทั้งหมดใน src ไฟล์ ซึ่งหากเป้นเว็บใหญ่ๆ ก็จะเวลาพอสมควร (จิงๆ แล้วมันใช้ Find Replace ได้ แต่เราก็ต้องตรวจด้วยตาอีกเพื่อความแน่นอน)
จึงอยากจะสอบถามว่า มันพอมีทางแก้ในการเขียนรึป่าวครับ ผมแค่สงสัยหน่ะครับ ว่าเราต้องแก้แบบนี้ทุกครั้งรึป่าวครับ
ส่วนอีกข้อคือ ระหว่าง http://www.domain.com/magician/Criss%20Angle/7/ และ http://localhost/magician/Criss-Angle/7/ อันไหนจะมีดีหรือผมเสียกันแค่ไหน หรือไม่มีผล ครับ
และเราสามารถแก้ในการ rewrite ได้รึป่าวครับ ว่าถ้าเจอ ช่องว่างให้เปลี่ยนเป้น - หรือเราต้องใช้ php เขียน
ขอบคุณครับ อาจถามเยอะไปหน่อยนะ แหะๆ
ต้องทำใน php ครับ มีหลายวิธี
อันนี้แล้วแต่บุคคลครับ
ส่วนเรื่องปัญหาการอ้างถึงรูป
แก้ได้ด้วยการเรียกแบบ full url ครับ
ทำกับทุกรูปเลย
และความจริงอยากให้ดี ทำ full url กับลิงค์ภายในก็ดีครับ
จะช่วยให้ search engine เข้าใจง่ายขึ้นครับ
อาจจะมีผลกับเรื่องอินเด็กด้วยน้า :wink:
ขอบคุณครับ ว่าแต่ท่าน EthaiZone เนี้ย มีเมลล์ผมด้วยนี้นา ไม่ยักรู้ว่าอยู่บอร์ดนี้ด้วย (แบบว่าไม่ค่อยได้เข้ามาหาความรู้เท่าไหร่ ช่วงนี้เซ้งเซ็ง คนรักจากไป :cry: )
ปล. ในเมลล์ท่านมี UnzO Corporation ป่ะครับ :?:
ขอจะถามหน่อยครับว่าเราจะรู้ได้ยังไงว่า Host มันใช้ได้หรือเปล่า
ผลลงโทรไปถาม คุยกันตั้งนานกว่าจะรู้เรื่อง เพราะไม่รู้ว่าจะเรียกมันว่าอะไร
เรียกว่า Mod_Rewrite ไม่เห็นเขารู้จักเลย ต้องนั่งอธิบาย
สุดท้ายเขาให้เข้าไปดูที่ phpinfo ที่ตรง url_rewriter.tags
ซึ่งผมก็ไม่รู้ว่ามันคืออย่างเดียวกันหรือเปล่า
นี่ดีนะลองถามจากเว็บ host ของไทย ถ้าของฝรั่งจะคุยยังไงเนี่ย
จึงอยากทราบครับว่ามีวิธีดูตรงไหน ว่าโฮสนั่นๆ สามารถใช้ได้
มันจะใช้ได้เฉพาะลีนุกหรือเปล่า หรือไม่เกี่ยวกัน
หรือถ้าต้องโทรถามจริงๆ จะถามว่าอย่างไรให้เข้าใจตรงกัน
ขอบคุณครับ
อ้างถึงจาก: hurahuraขอจะถามหน่อยครับว่าเราจะรู้ได้ยังไงว่า Host มันใช้ได้หรือเปล่า
ผลลงโทรไปถาม คุยกันตั้งนานกว่าจะรู้เรื่อง เพราะไม่รู้ว่าจะเรียกมันว่าอะไร
เรียกว่า Mod_Rewrite ไม่เห็นเขารู้จักเลย ต้องนั่งอธิบาย
สุดท้ายเขาให้เข้าไปดูที่ phpinfo ที่ตรง url_rewriter.tags
ซึ่งผมก็ไม่รู้ว่ามันคืออย่างเดียวกันหรือเปล่า
นี่ดีนะลองถามจากเว็บ host ของไทย ถ้าของฝรั่งจะคุยยังไงเนี่ย
จึงอยากทราบครับว่ามีวิธีดูตรงไหน ว่าโฮสนั่นๆ สามารถใช้ได้
มันจะใช้ได้เฉพาะลีนุกหรือเปล่า หรือไม่เกี่ยวกัน
หรือถ้าต้องโทรถามจริงๆ จะถามว่าอย่างไรให้เข้าใจตรงกัน
ขอบคุณครับ
ถ้าเป็น apache ใช้ได้ชัวน์ครับ แต่เค้าต้องเปิดใช้งาน mod_rewrite ในไฟล์ httpd.conf ก่อนครับ
บอกให้เค้าหาบรรทัดนี้
#LoadModule rewrite_module modules/mod_rewrite.so
แล้วเอาเครื่องหมาย # ด้านหน้าออก save แล้ว restart apache แค่นี้ก็ใช้ได้ละครับ
ขอบคุณมากครับ เดี๋ยวจะกลับมาอ่านให้จบ :P :P
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 หลัง REwrite มีเครื่องหมาย "+" จะพิมพ์คำสั่งยังไงครับ
อ้างถึงจาก: aomnarukแล้วถ้า URL หลัง REwrite มีเครื่องหมาย "+" จะพิมพ์คำสั่งยังไงครับ
\+
อ้างถึงจาก: UnzOขอบคุณครับ ว่าแต่ท่าน EthaiZone เนี้ย มีเมลล์ผมด้วยนี้นา ไม่ยักรู้ว่าอยู่บอร์ดนี้ด้วย (แบบว่าไม่ค่อยได้เข้ามาหาความรู้เท่าไหร่ ช่วงนี้เซ้งเซ็ง คนรักจากไป :cry: )
ปล. ในเมลล์ท่านมี UnzO Corporation ป่ะครับ :?:
มีครับๆ
ผมก็เพิ่งรู้ว่าทั่นอยู่ในบอร์ดด้วยเหมือนกัน :lol:
สำหรับท่านๆ ที่ไม่เข้าใจเรื่อง rewrite
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
ต้งอไป set อะไรก่อนหรือเปล่าครับ ถึงจะใช้ได้
ทำไมทำแล้วไม่เห็นเกิดอะไรขึ้นเลย
ใช้ hostmonster
ขอขุดหน่อยครับ ไม่รู้ว่า .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 แก้กันนานเลย
:-*
ผมลอง แบบง่ายที่สุดอ่ะครับ คือสร้างไฟล์ไว้สองตัว 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
ตอบคุณ hurahura
ลองติดต่อซัพพอร์ทดูครับ ผมเองก็ไม่เคยใช้ hostmonster ครับ
ตอบคุณ Joe
ใช้แบบนี้แทนครับ
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^joeimages/([0-9]+)/(.*)$ joeimages/$1/$2
แต่ผมก็ไม่เข้าใจว่าจะรีไรท์ไปทำไม :P
ส่วนที่ถามว่าดึงโดยตรงได้ไหม ได้ครับ
ตอบคุณ ttk
เข้าใจว่ามันหาไฟล์ b.html ไม่เจอ ไม่ก็เป็นที่เซอเวอร์
ลองติดต่อซัพพอร์ทให้ช่วยดูก็ได้ครับ เพราะขึ้นอยู่กับตำแหน่งโฟลเดอร์ด้วย (ในบางที)
คุณ 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
ให้ server หลัก มี
Alias เป็นชื่อserver รองสิครับ
อ้างถึงจาก: 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
:) เยี่ยมมากเลย :D
20/12/2007:
ไม่ได้ Update นาน วันนี้ไปเจอข้อมูลเว็บภาษาไทย เห็นว่ามีประโยชน์ครับ
http://www.phpconcept.com/node/8
เกี่ยวกับ regexp ซึ่งต้องใช้บ้างในการทำ URL Rewrite
:P ขอบคุณมาก กำลังมึนเลย บอรืดตัวเองเจ๊ง เพราะไปลงตัวนี้ครับ [url]http://www.phpbb-seo.com/boards/simple-seo-url-vf60/[/url] แต่มันดันไม่สมบูรณ์อ่ะครับ :-X
แถมตีมที่ใช้ดันไม่มีซับพอร์ทอีก :P
ขอบคุณที่ขุดมานะครับ ผมก็กำลังมึน ๆ กับ mod_rewrite พอดีครับ
ใครรู้บ้างว่า จะเอา page title มา Rewrite เป็นชื่อไฟล์
เช่น
้http://www.demo.com/text.php ---> page titile เป็น "pagetitle นะคับ"
ไปเป็น
้http://www.demo.com/pagetitle-นะคับ.html
:-*
อ่านแล้วมึนเหมือนกันครับ ...
ขอบคุณสำหรับบทความดีๆ ครับ :D
ขอบคุณครับ กำลังจะหัดเขียน .htaccess พอดีเลย
มึนต้วยคน ขอศึกษาเพิ่มอีกหน่อย
ขอบคุณครับ
ผมเขียนแบบนี้
RewriteRule ^([^/]*)\.html$ /atical_read.php?no=$1 [L]
เวลาเรียกใช้งาน http://www.mysite.com/1.html ได้ครับ
แต่มันไปซ้ำกับส่วนอื่นอยากให้ มันเป็น
http://www.mysite.com/atical/1.html
ต้องทำยังไงอ่ะครับ
ขอบคุณล่วงหน้าครับ
ขุดหน่อยยย เข้ามาจดดๆๆๆ
ความรู้ล้วน............อิอิ
วันนี้เสิร์ชหาบทความดีๆเรื่อง mod-rewrite เจอกระทู้นี้ ขอเก็บไว้อ่านก่อน ขอบคุณมากค่ะ :wanwan017:
ขอบคุณครับ
แล้วถ้าเป็นภาษา asp ต้องแปลงงัยค่ะใครรู้บ้าง
ขอบคุณครับผม :wanwan017:
:wanwan020: Thanks
ขอบคุณมากครับ :wanwan017:
เป็นการขุดที่มีประโยชน์ :wanwan017:
พอดีผมเข้ามาอ่านแล้ว อยากจะต่อยอดคำถามอีกนิดคับ ถ้าผมต้องการจะ rewrite จาก
htt://domainname/seminar ให้เป็น htt://domainname/สัมมนา
ลิงค์ไปยัง ที่เดียวกัน
ต้องทำยังงััย รบกวน ผู้รู้ด้วยน่ะครับ
ขอบคุณมากครับ :'(