http://localhost/blog.php?username=sitdh&action=post
กับ
http://localhost/blog/sitdh/post
url ไหนจำได้ง่ายกว่ากันครับ แน่นอนว่ายอมเป็ url ที่ 2 ที่สั้น และเข้าใจได้ง่ายกว่า นอกจากจะทำให้มนุษย์จำได้ง่าย ขึ้นกว่าเดิมแล้ว ยังทำให้ search engine ค้นหาข้อมูลของเว็บไซต์ นั้นๆ ได้ง่ายขึ้นมากครับ เทคนิคนี้เรียกว่า Clean urls เป็นเทคนิคที่อำนวยประโยชน์ ให้ผู้ใช้มากเลยครับ กำลังได้รับความนิยมมาขึ้นเรื่อย เนื่องจากเว็บกึ่งสำเร็จรูปหลายเจ้าก็ใช้ เช่น Wordpress หรือ drupal และเข้าใจว่าที่ gotoknow นี้ก็ใช้เช่น เดียวกัน
สำหรับเจ้า mod_rewrite นี้เห็นนาน และก็อยากจะนำมาใช้นานแล้ว แต่ว่ายังไม่มีเวลามาศึกษาซะที พอดีเมื่อวานมีโอกาศเลยลองนั่งงัดแงะ แกะเกาเจ้า mod_rewrite ดูก็เลยพอจะได้ความรู้มาบ้าง ซึ่งช่วงแรกๆ ก็ทะเลาะกับมันอยู่พักใหญ่เหมือนกันครับ เนื่องจากว่าเครื่องที่ใช้อยู่เป็น Vista ของที่ทำงาน ซึ่งก็มีปากมีเสียงกับ AppServ ที่ลงไว้อยู่เนืองๆ มาก่อนหน้านี้แล้ว (แก้ไขคอนฟิคทีไรต้องรีสตาร์ทเครื่องใหม่ทุกทีเลยครับ)
ก่อนเริ่มใช้ mod_rewrite ก็แบ่งออกเป็น 2 ส่วนครับ
-
การติดตั้ง ซึ่งก็มี 2 วิธีเช่นกัน คือบน linux และ windows สามารถทำได้ทั้ง IIS และ Apache ซึ่งขออธิบายเป็น Apache แล้วกันนะครับ
-
การกำหนดค่า จะมี 2 ส่วนหลักๆ ก็คือ การกำหนดค่าให้กับเครื่องแม่ข่ายให้สามารถใช้ .htaccess และ การกำหนดรูปแบบของ url ที่จะต้องการแทนที
* การติดตั้ง
หลังจากติดตั้ง Apache แล้ว ถ้าลง PHP ให้ลองใช้คำสั่ง phpinfo() เพื่อดูว่า mod_rewrite เปิดใช้งานแล้วหรือยัง
ถ้าเปิดใช้แล้วจะมีชื่อ mod_rewrite อยู่ในส่วนของ apache2handler แบบนี้ครับ
ซึ่งถ้ายังไม่มีก็สามารถติดตั้งได้ดังนี้ครับ
Windows
- ให้เข้าไปที่ %APACHE_HOME%\conf\httpd.conf
- เปิดไฟล์ httpd.conf แล้วหาคำว่า mod_rewrite โดยปกติแล้ว จะมีเครื่องหมาย '#' อยู่หน้าบรรทัด ให้เอาออกเพื่อให้ Apache โหลด mod_rewrite เข้าใช้งาน แต่ทำการแก้ไขให้เข้าไปที่ %APACHE_HOME%\modules เพื่อดูว่า Apache มีไฟล์ mod_rewrite.so (ไฟล์ของ โมดูล) แล้วหรือยัง
- หลังจากนั้นเปิด Apache Monitor (AppServ > Control Server by Service) แล้วเลือก Restart ก็เป็นอันเรียบร้อย
Linux <ul> <li>ใช้คำสั่ง sudo a2enmod rewrite </li> $ sudo a2enmod rewrite
<li>จากนั้นจะมีข้อความให้เรา ใช้คำสั่งโหลดค่าที่กำหนดใหม่ให้กับ Apache ก็ให้พิมพ์ตามนั้นเลยครับ
$ sudo /etc/init.d/apache2 force-reload
</li> </ul>
<h2>* การกำหนดค่า </h2> หลังจากติดตั้ง mod_rewrite แล้วขั้นตอนนี้ก็เป็นขั้นตอนที่สำคัญที่สุด ถ้าทำไม่ได้ก็ถึงขั้นใช้งาน mod_rewrite ไม่ได้เลยทีเดียวครับ เพราะ mod_rewrite จะทำงานร่วมกับ .htaccess ซึ่งความจริงแล้วสามารถกำหนดค่าต่างๆ ไฟล์คอนฟิคของ Apache ได้ แต่เพื่อให้สามารถใช้งานได้ มีประโยชน์สูงสุด หากมีหลายเว็บไซต์ภายในเครื่องก็ควรเอามาไว้ใน .htaccess เพื่อให้เป็นสัดส่วนครับ <ul> <li>เปิดไฟล์ httpd.conf - Windows, apache2.conf - linux เพื่อแก้ไขให้สามารถใช้งาน ไฟล์ .htaccess ได้ ก่อนแก้ไขให้สำเนาไฟล์เอาไว้กันเหนียวครับ จากนั้นให้เริ่มต้นด้วยการหาคำว่า “AllowOverride” ซึ่ง จะต้องเปลี่ยนค่าด้านหลังจาก “None” ให้เป็น “All” ซึ่งจะต้องเปลี่ยน 2 ที่ด้วยกันคือ ภายในแท็ก “<Directory / >” และ “<Directory [DocumentRoot] >” หากผิดพลาดลอง (500 Internal Server Error) ให้ลอง Restart Apache ดูครับ ถ้ายังเป็นเหมือนเดิม ลองเอาไฟล์ที่สำเนาเอาไว้มาแทนที่ แล้วทำตามใหม่อีกครั้งครับ
</li> <li>สั่งให้ Apache โหลดค่าที่เรากำหนดไปใช้ (ดูที่ การติดตั้ง)
</li> <li>ถ้าไม่มีอะไรผิดพลาด ให้ลองสร้างไฟล์ .htaccess ในโฟลเดอร์ที่เราต้องการใช้งาน ครับ ตัวอย่างเล่นที่ DocumentRoot เลยให้ลองใส่โค้ดตามนี้เข้าไปครับ
</li> <li>จากนั้น สร้างไฟล์ “product.php” แบบนี้ครับ
</li> <li>สุดท้ายให้พิมพ์ url แบบนี้ลงไปก็จะได้ผลดังรูปครับ
</li>
</ul>
ส่วนรูปแบบการทำงาน เดี๋ยวจะมาต่อในตอนหน้านะครับ
เครื่องมือที่ใช้ <ul> <li>
Host: Appserv 2.5.9
</li>
</ul>
ที่มา:
<ul> <li>
Apache module mod_rewrite
</li>
</ul>