สร้าง URL Rewrite และ PHP ฐานข้อมูล MySQL Database เพื่อ SEO บน Apache mod_rewrite บทความนี้จะเป็นการประยุกต์ใช้งานจริงของ Mod Rewrite (Apache mod_rewrite) กับ PHP และฐานข้อมูล MySQL Database ถ้าอ่านบทความนี้เข้าใจอย่างแจ่มแจ้ง จะสามารถมีไอเดียในการต่อยอดพัฒนาได้อีกมากมาย ที่จะสามารถพัฒนาร่วมกับ PHP และ MySQL Database ในบทความนี้จะสมมุติเป็นระบบข่างประชาสัมพันธ์ชื่อตารางว่า tb_news ตามรูป
โดยมี Column ชื่อว่า NewsID เป็น Primary Keys และมี Column ชื่อว่า Keyword ไว้สำหรับเก็บ Keyword ที่จะเอามาทำเป็น URL ที่รองรับ SEO
Screenshot
ตัวอย่าง Screenshot ที่ได้
สำหรับพื้นฐาน Apache Mod Rewrite กับ SEO สามารถอ่านได้ที่บทความนี้
Mod Rewrite (mod_rewrite) ด้วย Apache สร้าง URL Friendly รองรับ SEO ด้วย (.htaccess)
โครงสร้างและข้อมูลของ tb_news
CREATE TABLE `tb_news` (
`NewsID` int(4) unsigned zerofill NOT NULL auto_increment,
`Keyword` varchar(50) NOT NULL,
`Subject` varchar(150) NOT NULL,
`Description` text NOT NULL,
PRIMARY KEY (`NewsID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
--
-- Dumping data for table `tb_news`
--
INSERT INTO `tb_news` VALUES (0001, 'welcome-thaicreate', 'Welcome to thaicreate.com web develop....', 'Welcome to thaicreate.com web develop.\r\nWelcome to thaicreate.com web develop.\r\nWelcome to thaicreate.com web develop.\r\nWelcome to thaicreate.com web develop.');
INSERT INTO `tb_news` VALUES (0002, 'php-best-web', 'The php best for the Web program...', 'The php best for the Web program...\r\nThe php best for the Web program...\r\nThe php best for the Web program...\r\nThe php best for the Web program...');
นำ SQL นี้ไป Query เพื่อสร้าง Table และ Data
ไฟล์ทั้งหมดจะใช้ทั้งหมด 3 ตัว คือ
- .htaccess (กำหนด Rewrite Rule)
- news.php (แสดงรายการข่างทั้งหมด)
- viewnews.php (แสดงรายละเอียดของแต่ล่ะข่าว)
Code ทั้งหมด
.htaccess
RewriteEngine On
RewriteRule ^(.*)/(.*).html /viewnews.php?NewsID=$1&Keyword=$2
เป็น RewriteEngine ง่าย ๆ ที่ตรวจสอบ (.*)/(.*) คือ ข้อความแรก / ข้อความที่สอง.html แล้วนำค่าส่งไปยัง viewnews.php?NewsID=$1&Keyword=$2
news.php
<html>
<head>
<title>ThaiCreate.Com</title>
</head>
<body>
<?php
$objConnect = mysql_connect("localhost","root","root") or die(mysql_error());
$objDB = mysql_select_db("rewrite");
$strSQL = "SELECT * FROM tb_news";
$objQuery = mysql_query($strSQL) or die (mysql_error());
?>
<table width="600" border="1">
<tr>
<th width="100"> <div align="center">NewsID </div></th>
<th width="500"> <div align="center">Subject </div></th>
</tr>
<?php
while($objResult = mysql_fetch_array($objQuery))
{
?>
<tr>
<td><div align="center"><?php echo $objResult["NewsID"];?></div></td>
<td><a href="/<?php echo $objResult["NewsID"];?>/<?php echo $objResult["Keyword"];?>.html"><?php echo $objResult["Subject"];?></a></td>
</tr>
<?php
}
?>
</table>
<?php
mysql_close($objConnect);
?>
</body>
</html>
จาก Code จะมีการสร้างลิ้งค์เองเพื่อให้อยู่ในรูปแบบที่ต้องการ
<a href="/<?php echo $objResult["NewsID"];?>/<?php echo $objResult["Keyword"];?>.html"><?php echo $objResult["Subject"];?></a>
ซึ่งเมื่อดึงค่าจาก Database แล้วจะได้ URL คือ
/0001/welcome-thaicreate.html
viewnews.php
<html>
<head>
<title>ThaiCreate.Com</title>
</head>
<body>
<?php
$objConnect = mysql_connect("localhost","root","root") or die(mysql_error());
$objDB = mysql_select_db("rewrite");
$strSQL = "SELECT * FROM tb_news WHERE NewsID = '".$_GET["NewsID"]."' AND Keyword = '".$_GET["Keyword"]."' ";
$objQuery = mysql_query($strSQL) or die (mysql_error());
$objResult = mysql_fetch_array($objQuery);
?>
<h1><?php echo $objResult["Subject"];?></h1>
<?php echo nl2br($objResult["Description"]);?>
<?php
mysql_close($objConnect);
?>
</body>
</html>
เมื่อ URL ที่ส่งมาจากหน้า news.php เช่น
http://localhost:8081/0001/welcome-thaicreate.html
เมื่อผ่าน RewriteEngine ก็จะได้ตัวแปร 2 ตัวคือ
NewsID = 0001
Keyword = welcome-thaicreate
และในไฟล์ viewnews.php ก็ใช้การอ่านตัวแปรดังกล่าวเป็น $_GET เพื่อนำค่าไป Query ที่อยู่ในฐานข้อมูล MySQL มาแสดงหน้าเว็บ
Screenshot
หน้า news.php แสดงข่าวทั้งหมด
เมื่อคลิกและส่ง URL และแสดงผลในหน้า viewnews.php
เพิ่มเติม
การออกแบบโครงสร้างของ URL นั้นมีความสำคัญเช่นเดียวกัน เช่นการวางลำดับของเนื้อหาให้ชัดเจน และแยกโครงสร้างต่าง ๆ ด้วยเครื่องหมาย Slash (/) เพราะเวลาที่ Google ทำการเก็บข้อมูลก็จะลำดับโครงสร้างของเว็บ ว่าแต่ล่ะ Level นั้นเป็นเรื่องเกี่ยวกับอะไร เช่นอย่างของ thaicreate.com มีการออกแบบโครงสร้างเนื้อหาในแต่ล่ะภาษาอย่างเช่นเดียว
https://www.thaicreate.com/php.html => หน้าหลักของ PHP
https://www.thaicreate.com/php/forum.html => หน้าหลักของ PHP ที่เป็น Forum
https://www.thaicreate.com/php/forum/00001.html => หน่าสำหรับกระทู้แต่ล่ะกระทู้ที่อยู่ใน Forum
แนะนำเพิ่มเติมว่าการออกแบบโครงสร้างให้เป็นลำดับชั้นแบบนี้ ก็ช่วยให้หลักการ SEO นั้นถูกต้องยิ่งขึ้น เพราะ Google หรือ Bot เองจะสามารถเข้าใจโคสงสร้างของเว็บต่าง ๆ ได้ชัดเจนยิ่งขึ้น โดยสังเกตุจากการค้าหาจะมีการแสดงผล แบ่งแย่งในแต่ล่ะลำดับด้วย
ตัวอย่างการแสดงผลในหน้าค้นหา
จากรูปจะเห็นว่า Google เข้าใจโครงสร้างที่เราได้ออกแบบไว้ ซึ่งจะมี Sub ย่อยของ PHP และ PHP Forum ขึ้นมาด้วย และสามารคลิกไปยังลิ้งค์นี้ได้อีกด้วย
PHP => https://www.thaicreate.com/php.html
PHP Forum => https://www.thaicreate.com/php/forum.html
บทความอื่น ๆ ที่เกี่ยวข้อง
Go to : Mod Rewrite สร้าง URL Friendly รองรับ SEO ด้วย Module mod_rewrite ของ Apache Web Server
Go to : Apache Using 404 Error URL Rewrite - SEO Friendly URL for PHP
Go to : การทำ SEO กับแนวทางการเขียนโปรแกรมในยุคการแข่งขัน SEO (Search Engine)
Go to : ติดตั้ง Google PageRank (PR) ให้กับ Google Chrome และ Mozilla Firefox
Go to : IIS mod_rewrite/Url Rewrite (404 Error) URL - SEO Friendly URL for ASP and ASP.NET