Clean urls: สั้น จำง่าย ได้ประโยชน์ ตอนที่ 1


Clean urls, apache, mod_rewrite

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
  • ใช้คำสั่ง sudo a2enmod rewrite
  • $ sudo a2enmod rewrite

  • จากนั้นจะมีข้อความให้เรา ใช้คำสั่งโหลดค่าที่กำหนดใหม่ให้กับ Apache ก็ให้พิมพ์ตามนั้นเลยครับ
    $ sudo /etc/init.d/apache2 force-reload


* การกำหนดค่า

หลังจากติดตั้ง mod_rewrite แล้วขั้นตอนนี้ก็เป็นขั้นตอนที่สำคัญที่สุด ถ้าทำไม่ได้ก็ถึงขั้นใช้งาน mod_rewrite ไม่ได้เลยทีเดียวครับ เพราะ mod_rewrite จะทำงานร่วมกับ .htaccess ซึ่งความจริงแล้วสามารถกำหนดค่าต่างๆ ไฟล์คอนฟิคของ Apache ได้ แต่เพื่อให้สามารถใช้งานได้ มีประโยชน์สูงสุด หากมีหลายเว็บไซต์ภายในเครื่องก็ควรเอามาไว้ใน .htaccess เพื่อให้เป็นสัดส่วนครับ
  • เปิดไฟล์ httpd.conf - Windows, apache2.conf - linux เพื่อแก้ไขให้สามารถใช้งาน ไฟล์ .htaccess ได้ ก่อนแก้ไขให้สำเนาไฟล์เอาไว้กันเหนียวครับ จากนั้นให้เริ่มต้นด้วยการหาคำว่า "AllowOverride" ซึ่ง จะต้องเปลี่ยนค่าด้านหลังจาก "None" ให้เป็น "All" ซึ่งจะต้องเปลี่ยน 2 ที่ด้วยกันคือ ภายในแท็ก "<Directory / >" และ "<Directory [DocumentRoot] >" หากผิดพลาดลอง (500 Internal Server Error) ให้ลอง Restart Apache ดูครับ ถ้ายังเป็นเหมือนเดิม ลองเอาไฟล์ที่สำเนาเอาไว้มาแทนที่ แล้วทำตามใหม่อีกครั้งครับ


  • สั่งให้ Apache โหลดค่าที่เรากำหนดไปใช้ (ดูที่ การติดตั้ง)

  • ถ้าไม่มีอะไรผิดพลาด ให้ลองสร้างไฟล์ .htaccess ในโฟลเดอร์ที่เราต้องการใช้งาน ครับ ตัวอย่างเล่นที่ DocumentRoot เลยให้ลองใส่โค้ดตามนี้เข้าไปครับ

  • จากนั้น สร้างไฟล์ "product.php" แบบนี้ครับ


  • สุดท้ายให้พิมพ์ url แบบนี้ลงไปก็จะได้ผลดังรูปครับ

ส่วนรูปแบบการทำงาน เดี๋ยวจะมาต่อในตอนหน้านะครับ


เครื่องมือที่ใช้

ที่มา:
คำสำคัญ (Tags): #cleanurl#mod_rewrite#apache
หมายเลขบันทึก: 137365เขียนเมื่อ 11 ตุลาคม 2007 11:37 น. ()แก้ไขเมื่อ 14 มิถุนายน 2012 16:45 น. ()สัญญาอนุญาต: จำนวนที่อ่านจำนวนที่อ่าน:


ความเห็น (0)

ไม่มีความเห็น

พบปัญหาการใช้งานกรุณาแจ้ง LINE ID @gotoknow
ClassStart
ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต
ทั้งเว็บทั้งแอปใช้งานฟรี
ClassStart Books
โครงการหนังสือจากคลาสสตาร์ท