ภาพรวมการทำ Rewrite Mode ภาษาไทย (แนะนำให้มือใหม่คิดแบบง่าย ๆ ตามบทความก่อนที่จะเพิ่มเติมอะไรลงไป)
1) มีไฟล์ 3 ไฟล์ ดังนี้
- .htaccess เพื่อเขียน RewriteRule
- index.php เพื่อเรียกเฉพาะหัวข้อบทความมาแสดง
- read.php เพื่อให้ server ประมวลผลที่ server
2) ตารางฐานข้อมูลมีโครงสร้าง ดังนี้
- feild ชื่อ id คือ ลำดับที่บทความ
- feild ชื่อ topic คือ หัวข้อบทความ
- feild ชื่อ detail คือ เนื้อหาบทความ
โดยกำหนดให้ Charset ของฐานข้อมูลเป็น UTF-8 เท่านั้น และให้ทำการ insert ข้อมูลลงไปทั้ง 3 field ก่อนจะทำขั้นต่อไปครับ ทำแค่ 1 แถวก็พอครับ เพื่อทดสอบ
3) ไฟล์ทั้งหมดอยู่ที่ root ของโดเมน เช่น natiam.com/index.php , naitam.com/.htaccess
หลักการทำงาน
ผู้ชมคลิ๊ก link หัวข้อบทความจาก index.php?id=1 โดยที่ link นั้นกำหนด Tag แบบนี้ < a href="article/สอนเขียนเว็บไซต์/1 ">สอนเขียนเว็บไซต์
หลังจากที่ server ได้รับคำสั่ง request ขอดูเว็บเพจที่ direcory ชื่อ http://naitam.com/article/สอนเขียนเว็บไซต์/1 (ซึ่งไม่มีอยู่จริง) จากผู้เข้าชมแล้ว ไฟล์ .htaccess จะถูก server เรียกมาอ่านว่า มีการกำหนดคำสั่งอะไรไว้บ้าง ? ก่อนจะประมวลผลต่อ และหนึ่งในคำสั่งนั้น คือ RewriteRule ที่เรากำหนดไว้
RewriteRule ที่เรากำหนดไว้ จะกำหนดให้ไปเรียกไฟล์ read.php ขึ้นมา โดยรับตัวแปรผ่านลำดับของ Regular (ไม่ต้องงงครับ ปล่อยผ่านก่อน) ซึ่งตัวแปรถูกซ่อนไว้ใน URL นี้ คือ http://naitam.com/article/สอนเขียนเว็บไซต์/1 ซึ่งตัวแปรที่ 1 คือ สอนเขียนเว็บไซต์ และ ตัวแปรที่ 2 คือ 1นั่นเอง
หาก URL ที่ Request เข้ามา ตรงตามกฏของ Regular ครบถ้วน Server ก็จะส่งหน้าเว็บเพจ (ซึ่งก็ คือ http://naitam.com/article/สอนเขียนเว็บไซต์/1 ) กลับไปยังผู้เข้าชม โดยที่ URL ไม่ได้เปลี่ยนแปลง หรือ Redirect ไปไหนเลย
ส่วนไฟล์ read.php ก็จะประมวลผลออกมา และปรากฏผ่าน http://naitam.com/article/สอนเขียนเว็บไซต์/1 ตามปกติ
บรรทัดคำสั่งในทั้ง 3 ไฟล์
.htaccess
RewriteEngine on
RewriteRule ^article/(.*)/([0-9]+)/$ read.php?id=$1&id=$2
RewriteRule ^article/(.*)/([0-9]+)$ /article/$1/$2/ [R]
หมายเหตุ !
บรรรทัด RewriteEngine on ต้องอยู่บนสุด ส่วนบรรทัดอื่น ๆ จะอยู่บรรทักไหนก็ได้ ถ้ามีคำสั่งอื่นเขียนไว้ก่อน เช่น ErrorDocument 404 ฯลฯ และต้องเขียนคำสั่งตัวใหญ่ / ตัวเล็ก ตรงตามกฏทุกอย่าง คุณต้องศึกษากฏการเขียน Regular Expression ในการเขียนคำสั่งใช้กับ RewriteRule
index.php
require(connect.inc.php) // ไฟล์เชื่อมต่อฐานข้อมุล mySQL
$SQL = "SELECT id,topic FROM article";
$RESULT = mysql_db_query($dbname,$SQL);
while ($FETCH=mysql_fetch_row($RESULT)) {
echo "< a href = 'http://naitam.com/article/$FETCH[1]/$FETCH[0] '> $FETCH[1] </a >";}
?>
หมายเหตุ !
ผมขอเขียนแบบง่าย เพื่อสำหรับคนที่เพิ่งหัดเขียน คนที่เก่งแล้วสามารถเขียนแบบคำสั่งเดียว หรือ แบบ OOP ได้เลยครับ
read.php
require(connect.inc.php) // ไฟล์เชื่อมต่อฐานข้อมุล mySQL
$SQL = "SELECT * FROM article WHERE id=$_GET[id]";
$RESULT = mysql_db_query($dbname,$SQL);
while ($FETCH=mysql_fetch_row($RESULT)) {
echo "$FETCH[1] < br > $FETCH[2]";}
?>
หมายเหตุ !
ผมขอเขียนแบบง่าย เพื่อสำหรับคนที่เพิ่งหัดเขียน คนที่เก่งแล้วสามารถเขียนแบบคำสั่งเดียว หรือ แบบ OOP ได้เลยครับ
อัพโหลดและทดสอบ
อัพโหลดไฟล์ทั้ง 3 ไฟล์ไว้ที่ root ของ Domain เลย ไม่มีไว้ใน folder ไหน แล้วให้พิมพ์บราวเซอร์ เรียกไฟล์ http://yourwebsite.com/
ก็จะแสดงหัวข้อบทความขึ้นมา คลิ๊กที่ลิงค์ บราวเซอร์จะแสดง URL เป็น http://yourwebsite.com/article/หัวข้อบทความ/1 และเนื้อหาก็จะแสดงผลขึ้นมาด้วย
ภาพประกอบโดยละเอียด