Mod_Rewrite

(( บล็อกอันนี้อาจไม่ถูกหลักวิชา เพราะเป็นการลองผิดลองถูก แล้วนำมาบันทึกไว้กันลืม ))

เนื่องจากขณะนี้มีโปรเจคด่วนสุดๆ ต้องทำ และเกี่ยวข้องกับคนจำนวนมาก (ถ้ามันพร้อมให้บริการ) เลยต้องออกแบบข้อมูลรองรับเอาไว้

จุดหนึ่งที่กำลังคิดว่ามีความสำคัญ คือการใช้งาน 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

 
Did you like it?

No votes have been submitted yet.

ความคิดเห็น