clean URL ด้วย mod_rewrite
ลองเปรียบเทียบ 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 ก็ได้ครับ