GORAGOD.com

clean URL ด้วย mod_rewrite

clean URL คือ การทำให้ URL ไม่มี query string ครับ มักใช้เพื่อหวังผลทาง SEO ครับ เนื่องจาก SEO มักให้ความสำคัญของ keyword ใน query string น้อยกว่าบน URL

ลองเปรียบเทียบ URL แบบนี้
http://xxx.com/...rticle/view&id=1
และ
http://xxx.com/article-1.php
จะเห็นว่า url แบบหลังจะดูดีกว่า สั้นกว่า จำง่ายกว่า และให้ผลกับ SEO ได้ดีกว่า

เราสามารถสร้าง url แบบนี้ได้ง่ายๆ ด้วย .htaccess โดยการใช้ mod_rewrite

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{HTTP_HOST} ^localhost$
RewriteRule ^article-(.*)\.php$ index.php?module=article/view&id=$1 [L,QSA]
RewriteRule ^index\.php$ index.php?module=main [L,QSA]
RewriteRule ^article\.php$ index.php?module=article [L,QSA]

ผมยกตัวอย่างการทำ clean URL กับ GCMS เลยละกัน เห็นมีคนถาม

localhost ให้ใส่ URL ของคุณ เช่น www\.xxx\.com ครับ

RewriteRule ^article-(.*)\.php$ index.php?module=article/view&id=$1 [L,QSA]

อันนี้มันจะทำการแปลง article ครับ ในรูป http://localhost/article-1.php ให้เป็น http://localhost/...rticle/view&id=1 ซึ่งเป็น URL ตามปกติ

RewriteRule ^index\.php$ index.php?module=main [L,QSA]

ส่วนอันนี้ สำหรับหน้า index ตามปกติ http://localhost/index.php จะถูกเปลี่ยนเป็น http://localhost/...ndex.php?module=main

RewriteRule ^article\.php$ index.php?module=article [L,QSA]

ส่วนอันนี้ สำหรับหน้าหลักของ article http://localhost/article.php จะถูกเปลี่ยนเป็น http://localhost/...x.php?module=article

ส่วนการทำ URL แบบที่ส่งชื่อ article มากับ URL เลย เช่น http://www.xxx.com/mod_rewrite.php (เหมือนบนเว็บนี้) ก็อาจยุ่งยากเพิ่มขึ้นครับ แต่ก็สามารถทำได้ด้วยการ

1. ทำ mod_rewrite เหมือนกับข้างบนครับ
2. ทำการเก็บข้อมูลชื่อ article ซึ่งในที่นี้คือ mod_rewrite ลงฐานข้อมูล พร้อมกับ url จริงๆที่สามารถใช้เรียกหน้าเพจได้ เช่น module=article/view&id=1 (ซึ่งต้องสัมพันธ์กัน)
3. ทำการแยกตัวแปรที่ำได้จาก mod_rewrite แล้วเอาข้อมูลที่ได้ ไปค้นหา url ที่ถูกต้องจากฐานข้อมูล และนำข้อมูลที่ได้ไปเปิดเพจอีกที

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{HTTP_HOST} ^localhost$
RewriteRule ^(.*)\.php$ index.php?module=article/view&q=$1 [L,QSA]

เมื่อทำการเรียก http://www.xxx.com/mod_rewrite.php ก็จะถูกแปลงเป็น http://www.xxx.com/...le=article/view&q=mod_rewrite
ซึ่งเราก็สามารถนำค่า q ไปค้นหา url ที่แท้จริงอีกที

สามารถใช้ภาษาไทยได้นะครับ แต่ต้องเป็น UTF-8 แต่หากยังมีปัญหากับภาษาไทยอยู่ก็สามารถใช้ rawurlencode() เข้ารหัสลิงค์ก่อนส่งออกบน php ก็ได้ครับ