(( บล็อกอันนี้อาจไม่ถูกหลักวิชา เพราะเป็นการลองผิดลองถูก แล้วนำมาบันทึกไว้กันลืม ))
เนื่องจากขณะนี้มีโปรเจคด่วนสุดๆ ต้องทำ และเกี่ยวข้องกับคนจำนวนมาก (ถ้ามันพร้อมให้บริการ) เลยต้องออกแบบข้อมูลรองรับเอาไว้
จุดหนึ่งที่กำลังคิดว่ามีความสำคัญ คือการใช้งาน URL ซึ่งคิดว่าโปรเจคด่วนสุดๆ นี้ มีการเรียกข้อมูลผ่าน Address Bar ในเบราเซอร์ยาวพอสมควร จึงค้นหาข้อมูลเกี่ยวกับการย่อ URL ให้สั้นลง
Mod_Rewrite จึงเข้ามาเป็นคำตอบสำหรับงานนี้
Mod_Rewrite ทำงานได้ทั้งใน Apache และ IIS ในบล็อกนี้ทดสอบบน Apache 2.0.54 วิธีการตรวจสอบว่า Server เราใช้งานได้หรือไม่คือดูใน Loaded Modules ใน phpinfo(); แต่ถ้าเปิดดูแล้วไม่มีข้อมูล สามารถนำไฟล์ไปทดสอบในเว็บได้
ดาวน์โหลดไฟล์ rewrite.zip แล้วคลาย zip ออกจากได้โฟลเดอร์ rewrite อัพโหลดเข้าไปในเซิร์ฟเวอร์ "/rewrite/" ทดลองพิมพ์ URL ใน Address Bar ดังนี้ "/rewrite/test_rewrite.html" เบราเซอร์จะแสดงผลว่าใช้ Mod_Rewrite ได้ หรือ ไม่ได้
(( เวอร์ชั่นของ Server ที่ใช้งาน Mod_Rewrite ได้คือ Apache 1.3 ขึ้นไป หรือ IIS 4 สำหรับ Windows NT Server และ IIS 5 สำหรับ Windows 2000 Server ... ในบางครั้งการใช้งาน Mod_Rewrite ไม่ได้ อาจเป็นเพราะผู้ให้บริการโฮสติ้งไม่ได้เปิด Option นี้ไว้ ต้องสอบถามสักหน่อยนะครับ ))
เอาล่ะพอใช้งาน Mod_Rewrite ได้แล้ว ก็มาทดลองใช้กันดีกว่า
หลักการทำงานของ Mod_Rewrite (ที่ผมเข้าใจคือ) ทุกครั้งที่เราพิมพ์ข้อมูลใส่ใน Address Bar ข้อมูลเหล่านั้นจะถูกนำไปเปรียบเทียบกับเงื่อนไขที่เรากำหนดไว้ในไฟล์ .htaccess แล้วทำการแปลงค่าที่ได้เป็นไปตามที่เรากำหนด
การประยุกต์ใช้ Mod_Rewrite กับ PHP (ยกตัวอย่าง PHP ละกันเพราะเขียนเป็นอย่างเดียว)
ตัวอย่าง:
ทำการย่อ URL จากเดิม /file.php?id=1234 ให้สั้นลงอีก เช่น /1234
วิธีการแก้ไขในไฟล์ .htaccess
-----
RewriteEngine On
RewriteBase /rewrite/
RewriteRule ^(.*)$ file.php?id=$1
-----
อธิบาย:
^ = บอกตำแหน่งเริ่มต้นของการเก็บข้อมูล
$ = บอกตำแหน่งสิ้นสุดการเก็บข้อมูล
( ) = คือเซ็ตตัวแปรที่เราต้องนำไปใช้ ซึ่งถ้ามีหลาย ( ) เซ็ตตัวแปรที่ได้ก็จะเป็น $1, $2, $3 ไปเรื่อยๆ
ดูเพิ่มเติมได้ที่ mod_rewrite-cheat-sheet (.pdf)
^(.*)$ สีแดง คือ URL ที่ผู้ใช้งานพิมพ์เข้ามาใน Address Bar
file.php?id=$1 สีน้ำเงิน คือ ไฟล์ที่เราเรียกมาประมวลผล แล้วแสดงกลับไปในเบราเซอร์ โดยผู้ใช้งานจะไม่รู้กระบวนการนี้ นอกจากเรากำหนดให้ทำการเปลี่ยน URL ด้วย (เพิ่ม [R] เข้าไปท้ายเงื่อนไข - ดูในเอกสาร mod_rewrite-cheat-sheet ประกอบ)
-----
RewriteRule ^(.*)$ file.php?id=$1 [R]
-----
โดยทั้งหมด ยังสามารถสร้างเงื่อนไขอื่นๆ ได้อีกมากมาย ลองศึกษากันดูนะครับ ;)
ข้อมูลอ้างอิง:
- Apache Mod Rewrite เพื่อทำ Easy URL
- การแปลง URL โดยใช้ Mod_Rewrite
- Apache Rewrite Rules
- MOD_REWRITE CHEAT SHEET
- mod_rewrite กับ ThaiCSS