Scriptdd.com

บทความบ้าบ่นของคนทำเว็บ ปี 6

หาไม่เจอก็ search สิจ๊ะ Google

บริการโฮสติ้ง จดโดเมน คุณภาพ คลิก!!

Apache Mod Rewrite เพื่อทำ Easy URL

หัวข้อ บทความ แทก Apache | PHP

เทคนิคนี้เป็นผลพลอยได้จากการเขียน Scriptdd ตัวใหม่นี่แหล่ะครับ
ด้วยความที่ ตัวเก่านั้นมีอายุหลายปีแล้ว ทำให้อะไรหลายๆอย่างดูเก่าตามไปด้วย

การทำ Easy URL นั้นเป็นเทคนิคอย่างหนึ่งที่ช่วยให้ URL ของเรา สวยงามและ
สื่อความหมายให้กับผู้ใช้โดยเฉพาะ Search Engine ต่างๆแล้วจะชอบมาก


เพราะอะไร ?

ผมขอยกตัวอย่างง่ายๆ เช่น URL นี้

แบบดั่งเดิม
http://www.unlimitpc.com/modules.php?name=Article&pa=showpage&pid=295

ถ้าเปลี่ยนใหม่เป็น
http://www.unlimitpc.com/Article/showpage/295.html

หรือ
http://www.unlimitpc.com/Article/POV-GF8500GT.html

3 URL นี้ถ้าเป็นคุณ คุณจะคลิกอันไหนครับ ? หรือพอเดาได้ไหมครับ
ว่า URL นี้เป็นเนื้อหาเกี่ยวกับอะไร ??

นี่แหล่ะครับการทำ Easy URL ซึ่งนอกจากจะทำให้ผู้ใช้สนใจจะคลิก Link แล้ว
ยังสามารถช่วยเพิ่มความน่าสนใจให้กับ Search Engine ได้ด้วย

เนื่องจากการทำ SEO (Search Engine Optimization) ก็มีการพิจารณาชื่อ URL
ในการทำ Index ของ Keyword ด้วย

 


แล้วทำยังไง ?

สำหรับ Apache แล้วนั้นเรียกได้ว่า หมูมากเพราะถูกออกแบบมาสำหรับเรื่องนี้โดยเฉพาะ

พระเอกของเรานั้นคือ Mod Rewrite ครับ

Mod Rewrite เป็นโมดูลที่เพิ่มเติมสำหรับ Apache ให้สามารถทำงานลักษณะแสดงเนื้อหา
(จาก php หรือ pl หรือ html ต่างๆ) ลงบน URL ที่กำหนดไว้ในเงื่อนไขได้

เช่น

การที่เราเห็น URL ว่า
http://www.songburi.com/interview/petch_album_lets_talk_about_love_1.html

ความจริงแล้วระบบภายในอาจจะเรียกเป็น
http://www.songburi.com/interview/index.php?id=petch_album_lets_talk_about_love_1

ซึ่งทั้งหมดอยู่ที่การ Config Mod Rewrite นั้นแหล่ะครับ

(ไม่ต้องแปลกใจแอบ Promote Web ให้เพื่อนซะงั้น :P)

ฉะนั้นจากที่ผมกล่าวมาการทำ Easy URL ด้วย Mod Rewrite ต้องทำตั้งแต่การออกแบบ Script ในฝั่ง
เนื้อหาให้สัมพันธ์กับการ Config Mod Rewrite ครับ


ว่าแล้วมาเริ่มกันที่การ Config Mod Rewrite ก่อนครับ

1. ตรวจสอบก่อนว่า Server มี Mod Rewrite หรือเปล่า
สำหรับ สาวก Apache เท่านั้น ลองเขียน php ขึ้นมา File นึงครับ

<?
phpinfo();
?>


แล้ว Upload ขึ้นไปบน Server ลองดูจาก phpinfo ว่ามี Mod Rewrite ใน Server หรือเปล่า

จากรูปจะเห็นว่า php ตรวจสอบแล้วว่า Apache ได้ติดตั้ง mod rewrite เอาไว้
แบบนี้ก็มีโอกาสใช้ได้ 50% แล้วครับ ^^

2. ต่อไป ให้ลอง Download Script ตรวจสอบนี้ (คลิกที่นี่) ไป ติดตั้ง มีอยู่ 2 File น่ะครับ
.htaccess คือ File config mod rewrite และ index.php เป็นตัวอย่างการเรียก URL

ที่ Server ของคุณ เอาไว้ใน /rewrite/ นะครับ แล้วลองเรียก URL ว่า

/rewrite/test_rewrite.html  (เปลี่ยนคำว่า test_rewrite เป็นคำที่คุณต้องการตามสะดวก)


ถ้าขึ้นตามรูปแสดงว่า Server ของคุณพร้อมใช้งาน Mod Rewrite แล้วล่ะครับ ^^


3. ถ้าลองตามข้อ 2 แล้วไม่สามารถใช้งานได้กรุณาแจ้ง Admin ครับ ให้เพิ่ม ใน httpd.conf
ว่า ให้ AllowOverride All ใน Home Path ของ Website ของคุณ


การ AllowOverride All คือการยอมรับการเรียก .htaccess จาก folder ใดๆก็ได้ครับ


ถ้าทุกอย่างเรียบร้อยคุณก็จะสามารถแปลงร่างเล่น Easy URL กันได้แล้วครับ เย้

แิอบโฆษณา

พี่ต่อสะกิดมาฝากข่าวโฆษณาครับ www.siamhosting.com Server ทุกตัว รองรับ Mod Rewrite ครับ ^^!


เริ่มออกแบบส่วน PHP เพื่อปรับการเรียกใช้

เนื่องจาก Script เดิมที่ผมเคยเขียนไว้ ในการเรียกเนื้อหาข้อมูลโดยใช้ id แทนฉะนั้น
ผมจึงเพิ่ม Field ขึ้นมา 1 ช่องเพื่อเก็บชื่อ Easy URL ที่เราต้องการเอาไว้


เสร็จแล้วผมจึงเปลี่ยน Script จากการเรียก id เป็นเรียก Easy URL แทน ดังนี้

   Script วิธีเรียกแบบเดิม
   content_detail.php?id=1234

   แก้ใหม่
   content_detail.php?path_url=easy_url_55555
 
เท่านี้ Script เดิมก็สามารถเรียกใช้งานแบบ Easy URL ได้แล้วครับ


เขียน .htaccess เพื่อรับกับส่วน PHP

จากที่เห็นผมจึงแก้ไข .htaccess ใหม่ดังนี้

----
RewriteEngine On
RewriteBase /content/

RewriteRule ^(.*).html content_detail.php?path_url=$1
-----



จาก .htaccess ฉะนั้นสรุปได้ว่า Easy URL ใหม่ที่จะเกิดขึ้นก็คือ

http://www.yourdomain.com/content/my_easy_url_if_i_want.html


กระบวนการของ URL ดังกล่าวนี้คือ
เมื่อมีการเรียก URL ที่อยู่ภายใต้ /content/ เข้ามา Apache จะตรวจสอบว่า
ถ้ามี Filename ใดๆ .html เข้ามา Apache จะส่ง Filename นั้นๆ ไปให้กับ
PHP ชื่อว่า content_detail.php?path_url=ชื่อ filename นั้นๆ นั้นเอง

ซึ่งการเขียน .htaccss นี้สามารถเขียนหลายๆ เงื่อนไขเข้าไปได้เช่น

----
RewriteEngine On
RewriteBase /content/

RewriteRule ^(.*).html content_detail.php?path_url=$1
RewriteRule ^page-(.*).html index.php?p=$1
-----


กรณีที่ เนื้อหามีหลายหน้า ปกติเราจะส่งข้อมูลเป็น index.php?p=2 ไป
แต่ผมเปลี่ยนใหม่ให้เรียกเป็น page-2.html แทนครับ


ทั้งหมดที่กล่าวมาเป็นเทคนิคแค่เบื้องต้นและ สรุปให้ดูง่ายที่สุด
ใครอ่านไม่รู้เรื่องลองอ่านซ้ำหลายๆรอบ น่ะครับ

ถ้าหากใครต้องการเทคนิคสูงๆ ผมก็ขอทิ้ง Link อ้างอิงเอาไว้ให้ลองไปศึกษากันดู
บทความนี้ก็ขอจบแค่นี้แหล่ะครับ


อ้างอิง

ต้นน้ำที่ผมเริ่มหาข้อมูลจากคุณ bomber ครับ
http://www.narisa.com/blog/bomber/index.php?showentry=133

เทคนิคหลายๆแบบของการเขียน Mod Rewrite
http://corz.org/serv/tricks/htaccess2.php
http://www.sitepoint.com/article/guide-url-rewriting
http://forums.searchenginewatch.com/showthread.php?t=3925
http://www.modrewrite.com/

อันนี้สรุปทั้งหมด Print ออกมาแปะฝาบ้านได้เลยครับ
http://www.ilovejackdaniels.com/apache/mod_rewrite-cheat-sheet/

สำหรับคนที่ใช้ IIS ของ Microsoft ลองดูที่ Link นี้นะครับ
สามารถใช้ ModRewrite ได้เหมือนกัน
http://www.micronovae.com/ModRewrite/ModRewrite.html

รูปคุณ Read (11,921) Comments (15) 2007-04-29 16:43:26

ความคิดเห็น

หุหุ เขียนจากประสบการณ์นี่มันดีจริงๆ

รูปคุณ Patsonic โดยคุณ Patsonic 2007-04-30 22:44:30

ขอถามหน่อยครับ ฟรีโฮสต์บางที่เขาไม่ให้อัพ .htaccess จะทำไงดีครับ

รูปคุณ ake โดยคุณ ake 2007-04-30 23:08:13

ตอบคุณ ake แบบกำปั้นทุบดินเลยนะครับว่า

ก็อดใช้ล่ะครับ ^^

แนะนำให้ลงทุนเช่า Hosting ที่มี option นี้ดีกว่า
ปัจจุบันราคาก็ไม่ได้แพงมากแล้ว

อาจจะสังเกตง่ายๆ โดยสอบถามทาง Hosting ว่าสามารถติดตั้ง Wordpress ได้ไหม
เพราะ Wordpress ก็มีการเรียกใช้ mod_rewrite เหมือนกัน

รูปคุณ 9AuM โดยคุณ 9AuM 2007-05-02 20:25:57

ผมใช้ประจำเลยอิอิ

รูปคุณ SvZ โดยคุณ SvZ 2007-05-10 00:15:16

ดีมากๆเลยครับ ผมก็อยากจะทำแบบนี้ แต่ไม่มีความรู้ด้าน server เท่าไหร่เลย คราวนี้คงลองทำตามได้บ้าง ^_^

รูปคุณ พีกับยู โดยคุณ พีกับยู 2007-05-15 02:10:28

บทความดีมากๆ ครับ คำถามพวก ทำ URL เป็บแบบ .html ทำไง
เจอมาเยอะแล้วครับ บทความนี้สมบูรณ์มากๆ ครับ ;)

รูปคุณ the DtTvB โดยคุณ the DtTvB 2007-05-17 20:29:23

ไม่ไหวหวะ เฮีย ผมยอมแพ้ สงสัยต้องให้เฮียสงเคราะห์ ซะแล้ว

รูปคุณ พร อันทะ โดยคุณ พร อันทะ 2007-05-21 03:26:53

ยัง config บน windows ไม่ได้เลยครับ

รูปคุณ อ๊อด โดยคุณ อ๊อด 2007-08-15 18:35:28

พยายามมาทั้งคืน

ไม่ได้จริงๆครับ ไม่รู้ต้องไปตั้งค่าตรงไหนอีกหรือเปล่า
ผมปรับ AllowOverride All แล้ว ก็ยังไม่เวิร์ค
ไฟล์ .htaccess ทำงานในคำสั่งนะครับ อย่างเช่นพวก DirectoryIndex
แต่กับ mod_rewrite กลับไม่ทำงานซะงั้น
ผมต้องปรับอะไรตรงไหนหรือเปล่าครับ

รูปคุณ อ๊อด โดยคุณ อ๊อด 2007-08-16 05:34:15

ลืมบอกไป
Apache 1.3.37/ Windows XP Pro / PHP 5.2.3 ครับ

รูปคุณ อ๊อด โดยคุณ อ๊อด 2007-08-16 05:35:45

ขอบคุณมากครับ เป็นบทความที่ดีมาก ๆ ครับ

รูปคุณ SS โดยคุณ SS 2007-10-26 19:26:06

ไฟล์ browserปรากฏดังนี้
The requested URL /article/Discount Car Audio=id=8 was not found on this server.

ไฟล์ .htaccess ปรากฏดังนี้
RewriteBase /

RewriteRule ^(.*).html index.php$ 1?id=$ 2
ไฟล์ index.php

เขียนดังนี้

<td colspan="2" align="left" valign="top">
<a href="<?php echo $row_rs_title['title']; ?>=id=<?php echo $row_rs_title['id']; ?>"><img src="images/ar1.gif" width="15" height="10" border="0" /><?php echo $row_rs_title['title']; ?></a></td>

ช่วยด้วยครับ
แก้มาหลายวันแล้วครับยังไม่ได้เลย

รูปคุณ marker โดยคุณ marker 2007-10-30 13:13:27

ขอบคุณครับ ไว้จะลองทำดู :)

รูปคุณ Orca โดยคุณ Orca 2007-10-30 14:04:37

แล้วสำหรับ get var มากกว่า 1 ตัวล่ะครับ จะทำได้หรือปล่าว

รูปคุณ ปันปัน โดยคุณ ปันปัน 2008-04-28 07:17:07

สรุปได้สุดยอดมาก คับ ผมหาอ่านมาทั่วแล้ว ทั้งของนอกของไทย

โหวตให้บทความนี้ได้อยู่ในบ้าน AF ต่อเลย ครับ ... แป่ว ...

รูปคุณ เอ โดยคุณ เอ 2008-08-08 17:21:14

ร่วมแสดงความคิดเห็น

ขอความกรุณา ปัญญาชน ทุกๆท่าน รณรงค์การใช้ภาษาไทยให้ถูกต้อง กรุณา
ลงความคิดเห็นโดยใช้ภาษาไทยให้เป็นภาษาไทย งดการใช้ภาษาวัยรุ่น,
แอ๊บแบ๊ว บอกตรงๆปัญญาอ่อน !! Admin นั่งอ่านแล้วปวดหัว

เข้าระบบ



สมัครสมาชิก
ลืมรหัสผ่าน

บทความล่าสุด

Tags

SEO Travel Payment Gateway Tool About me Framework Phantom Blog Internet Explorer Home Decorate Security Microsoft PHP Game Gallery Mozilla BarCampBangkok Lenovo ASP Review Live Cottoncandy Search Engine XHTML Hardware Yahoo Movie Downloads Instant Messenger Ajax

อื่นๆ ...

เพื่อนบ้าน

สถิติส่วนตัว

คลิกรับ Feed สิจ๊ะ

TwitterCounter for @9aum

Scriptdd.com | ctdd Version 3.0 ติดต่อฐานข้อมูลทิ้งสิ้น 6 ครั้งใช้เวลาประมวลผล 0.0430 วินาที
โปรแกรมโดย 9AuM | ออกแบบโดย styleshout