Mod Rewrite (mod_rewrite) ด้วย Apache สร้าง URL Friendly รองรับ SEO ด้วย (.htaccess) |
Mod Rewrite สร้าง URL Friendly รองรับ SEO ด้วย Module mod_rewrite ในยุคแห่งการแข่งขัน SEO เพื่อให้ได้อันดับการค้นหาของ Search Engine อย่าง Google ที่จะทำให้เว็บไซต์ติดอันดับการค้นหาอย่างรวดเร็ว และอันดับต้น ๆ ซึ่งผลการค้นหาเหล่านี้ทาง Google ไม่ได้อาศัยคนหรือเจ้าหน้าที่มาทำการจัดอันดับแต่อย่างใด แต่เป็นไปตามอัลกิริทึมของ Google ที่ถูกเขียน Logic ไว้อันซับซ้อนประกอบด้านตัวแปรมากกว่า 2 ล้านตัวแปร และปัจจัยอื่น ๆ ที่เป็นความลับของ Google ที่จะมีหลักการวิเคราะห์ให้คะแนน และจัดอันดับอัตโนมัติ และแม้กระทั่ง Search Engine เจ้าอื่น ๆ ก็ใช้เทคนิคในรูปแบบเช่นเดียวกัน และบทความนี้จะให้ความสำคัญกับ Search Engine ของ Google เป็น Seach Engine อันดับหนึ่งของโลก และมีผู้ใช้มากที่สุด เกือบ 98% (สถิติในประเทศ)
วิธีการที่ Search Engine เหล่านี้เข้ามาจัดการกับเง็บไซต์ของเรานั้น เว็บไซต์เหล่านี้จะต้องทำการสำเนาข้อมูลในหน้านั้น ๆ เข้าไปในระบบฐานข้อมูลของตัวเอง โดยการส่ง bot (Google bot) มาเก็บข้อมูลตามเว็บไซต์ต่าง ๆ ใช้วิธีไต่มาตามลิ้งค์ และทำสำเนาข้อมูล พร้อมกับการให้คะแนน ข้อมูลเนื้อหาเหล่านั้นด้วย เพื่อพร้อมจะแสดงผลในการค้นหาจากผู้ใช้ และเวลาที่ bot เหล่านี้มาเก็บข้อมูล จะใช้วิธีการไต่และอ่านไปตาม URL หลายเว็บได้ออกแบบ URL แบบเป็นแบบ Dynamic URL
เช่น
www.thaicreate.com/view_detail.php?id=123
วิธีนี้ ไม่่ได้ช่วยบ่งบอกว่า URL นี้เกี่ยวข้องกับอะไร การได้คะแนนของ SEO ก็น้อยลงตามไปด้วย แต่ถ้าเราใช้ URL
เช่น
www.thaicreate.com/ajax/ajax-tutorial-basic/
หรือ
www.thaicreate.com/ajax/ajax-tutorial-basic.html
เมื่อ bot เข้ามาเก็บข้อมูลก็จะทราบได้ทันทีแปลความหมายได้เลยว่า URL นี้เป็นเนื้อหาเกี่ยวกับบทความ Ajax และการสอน Ajax แบบ Basic ซึ่งจะได้คะแนน SEO ที่มากขึ้น รวมทั้งอันดับการค้นหาก็จะดีขึ้นไปด้วย และวิธีนี้ทาง Google ก็ได้แนะนำหลักการปฏิบัติแบบนี้เช่นเดียวกัน เทคนิคนี้ถูกใช้แพร่หลายไปยังเว็บไซต์ต่าง ๆ เป็นเทคนิคการเพิ่ม Keyword เข้าไปใน URL ที่ได้รับความนิยมอย่างมาก เพราะได้ผลมีผลดีทั้งในรูปแบบของ SEO และผู้ใช้ก็เข้าใจวัตถุประสงค์ของ URL เช่นเดียวกัน
เพิ่มเติม
การทำ URL Friendly เพื่อรองรับ SEO นั้น เป็นแค่องค์ประกอบหนึ่งที่จะช่วยให้อันดับการค้นหาดีขึ้นเท่านั้น และยังมีองค์ประกอบอีกมากมาย และบางครั้งการทำ SEO ด้วย URL มากจนเกินไปก็มีผลเสียต่อเว็บไซต์มากเช่นเดียวกัน สำหรับพื้นฐานการทำ SEO สามารถอ่านคำแนะนำได้จากบทความนี้
การทำ SEO กับแนวทางการเขียนโปรแกรมในยุคการแข่งขัน SEO (Search Engine)
การทำ URL SEO Friendly จะต้องทำอย่างไร???
ถ้าคุณสร้างเว็บไซต์ด้วย HTML ซึ่งเป็น Static Content ก็ไม่ใช่เรื่องยากอะไรที่จะทำแบบนั้น ก็เพียงสร้างโฟเดอร์ตามโครงสร้างและสร้างชื่อไฟล์ให้อยู่ในรูปแบบที่ต้องการ ก็เป็นการเสร็จสิ้น แต่ในความเป็นจริงเว็บไซต์ส่วนมากจะเป็นแบบ Dynamic หรือมีการเพิ่มลบข้อมูลตลอดเวลา เช่น การเพิ่มข้อมูลใน MySQL ด้วย PHP การเพิ่ม ตอนที่แสดงผลก็จะมีการอ้างอิง ID ข้องข้อมูลขั้น ๆ และ PHP ก็เอา ID เพื่อไปเลือกข้อมูลจาก MySQL มาแสดงอีกที เช่น
http://localhost/viewdetail.php?ID=1234
ซึ่งวิธีด้วยิวธีนี้เองเราจะทำการแปลง URL เหล่านี้ให้อยู่ในรูปแบบของ SEO Friendly เช่น
http://localhost/1234/
แต่ในหลักการ SEO ที่ถูกต้องจริง ๆ แล้ว URL เหล่านี้ควรจะเป็น Keyword ของขทความ ซึ่งใน MySQL ที่จัดเก็บควรจะเพิ่ม Column ที่เป็น Keyword เข้าไปด้วย และแทนการใช้ ID ซึ่งจะได้เป็นแค่ตัวเลขโดยไม่ได้สื่อถึงวัถตุประสงค์แต่อย่างใด เช่น
http://localhost/viewdetail.php?ID=1234&Keyword=ajax-tutorial
ได้ URL ใหม่เป็น
http://localhost/1234/ajax-tutorial/
URL ใหม่ที่สวยงามน่าคลิก และเหมาะสมต่อ SEO อย่างยิ่ง
เริ่มต้นการทำ Mod Rewrite กับ Apache mod_rewrite Module
ตามที่ได้เกริ่นไว้ในย่อหน้าแรก Mod Rewrite จะใช้บน Apache ทำงานอยู่บนไฟล์ .htaccess (ไฟล์นี้จะไว้สำหรับเขียนพวก Rewrite Rule ต่าง ๆ ลงในเว็บไซต์ และจะต้องจัดเก็บไว้ใน Root ของ เว็บ หรือถ้าอยู่ใน Sub Folder ก็จะต้องเก็บไว้ใน Sub นั้นด้วย) ฉะนั้นใน Apache Web Server นั้นจะถูกใช้ร่วมกับ PHP บทความนี้ก็จะทดสอบกับ PHP เช่นเดียวกัน และในขั้นแรกเราจะต้องตรวจสอบว่า Apache Web Server นั้นรองรับ mod_rewrite หรือไม่ ด้วยการใช้ phpinfo);
เพิ่มเติม
เนื่องจาก mod_rewrite นั้นจะทำงานในรูปแบบอ้างจาก root เพราะฉะนั้นในบทความนี้จะสร้าง root เว็บขึ้นมาใหม่ เพื่อความไม่สับสนเมื่อรันใน Sub Folder โดยจะใช้ URL ว่า
http://localhost:8081/
ซึ่งเปรียบเหสมือนเว็บไซต์หนึ่ง ๆ เมื่อนำไปใช้งานจริง
สำหรับการสร้าง Port ใหม่ใน Apache บน localhost สามารถอ่านได้จากบทความนี้
Apache httpd Create New VirtualHost (Create New Port)
โดยสร้างเป็น Port ที่ 8081 และ Root Document อยู่ที่ C:/Appserv/www/modrewrite/
httpd.conf
Listen 8081
<VirtualHost localhost:8081>
DocumentRoot C:/Appserv/www/modrewrite/
</VirtualHost>
ทดสอบการทำงานของ Port ใหม่
ในรูปยังไม่มีไฟล์อะไรเป็นโฟเดอร์ว่างเปล่า
ย้ำเดียวจะงง ว่าการสร้าง Port ใหม่นี้เพื่อทดสอบเท่านั้น กรณีที่ไปใช้งานจริงไม่ต้องสร้างแต่อย่างใด หรือว่าจะใช้ผ่าน http://localhost/ เลยก็ได้ แต่ Path จะต้องเก็บไว้ที่ C:/Appserv/www/
ขั้นที่ 1 ตรวจสอบว่า Apache Web Server สามารถใช้ mod_rewrite ได้หรือไม่ ด้วยกาใช้ phpinfo();
phpinfo.php
<?
phpinfo();
?>
จัดเก็บไว้ที่ C:\Appserv\www\modrewrite\phpinfo.php จากนั้นทดสอบดูรายละเอียดของ phpinf() ได้จาก
http://localhost:8081/phpinfo.php
ดูในส่วนของ apache2handler และ Loaded Modules ว่ามี mod_rewrite อยู่หรือไม่ จากในตัวอย่างกฏว่าไม่มี ซึ่งวิธีแก้ไขจะต้องไปเปิดในไฟล์ httpd.conf (กรณีบน Host จริงให้แจ้งไปยังผู้ให้บริการ)
httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so
ให้เพิ่มแถว ๆ ที่เป็น LoadModule ลองใช้การค้นหา ซึ่งในตัวที่เป็น Default จะมีการเปิดปิดไว้หลายตัว ดังรูป การเปิดคือการเอาเครื่องหมาย # ออก หลังจากนั้นก็ Restart Apache ซะ 1 รอบ
การแก้ไขและเปิด mod_rewirte ด้วยการเพิ่ม mod_rewrite.so บน apache
จากนั้นก็ทดสอบเรียก phpinfo() อีกครั้งหนึ่ง ก็จะปรากฏคำว่า mod_rewrite ซึ่งตอนนี้สามารถใช้งานได้แล้ว
ขั้นที่ 2 เขียนไฟล์ .htaccess เพื่อเขียน Rewrite Rule ลงในเว็บไซต์ ตามที่ได้เกริ่นไว้ในหัวย่อหน้าก่อนนี้ หลังจากเปิดให้ Apache สามารถรองรับ Module ของ mod_rewrite ได้แล้ว การทำงานต่าง ๆ ต่อไปก็เป็นหน้าที่ของไฟล์ .htaccess ซึ่งเป็นไฟล์ที่ทำหน้าที่รับคำสั่งจาก เว็บไซต์ เพื่อส่งให้ Apache แปลงคำสั่งและส่งผลลัพธ์กลับมา โดยไฟล์ .htaccess จะต้อถูกตัดเก็บไว้ใน Root ของเว็บไซต์ ซึ่งในที่นี้จะต้องเก็บไว้ที่
C:\Appserv\www\modrewrite\.htaccess
หรือกรณีที่ Path อยู่ใน Sub ของ Folder ก็จะต้อง นำไฟล์นี้ไปเก็บไว้ใน Sub โฟเดอร์เช่นเดียวกัน และในกรณีที่ใช้ .htaccess อยู่ใน Sub Folder จะต้องเพิ่ม AllowOverride All ใน httpd.conf เข้าไปด้วยครับ เช่น
httpd.conf
<Directory "C:/Appserv/www/modrewrite/">
AllowOverride All
</Directory>
การเริ่มต้นคำสั่ง Rewrite จะเริ่มต้นด้วย
.htaccess
RewriteEngine on
ตัวอย่าง 1 เปลี่ยนจาก /viewdetail.php?id=1234 เป็น /view/1234/
รูปแบบ
http://localhost:8081/viewdetail.php?id=1234
ในไฟล์ viewdetail.php เราจะได้ค่า $_GET["id"] = 1234;
ต้องการเปลี่ยนเป็น
http://localhost:8081/view/1234/
เขียน RewriteEngine เป็น
.htaccess
RewriteEngine On
RewriteRule ^view/([0-9]+)/$ viewdetail.php?id=$1
RewriteRule ^view/([0-9]+)$ /view/$1/ [R]
viewdetail.php
<?
echo "id=".$_GET["id"];
?>
เมื่อพิมพ์ URL ว่า http://localhost:8081/view/1234/
ใน php สามารถใช้การ $_GET["id"] เพื่อใช้งานได้
คำอธิบาย
RewriteRule ^view/([0-9]+)/$ viewdetail.php?id=$1 (เมื่อมีการรับค่าในรูปแบบ /view/1234/ ให้เรียกไฟล์ viewdetail.php?id=$1 พร้อมกับส่งค่า $1 คือตำแหน่งที่ 1 = ([0-9]+) )
RewriteRule ^view/([0-9]+)$ /view/$1/ [R] (ตัวนี้ตรวจสอบรูปแบบ /view/1234 และแทนที่ /view/1234/ (Slash) ให้อัตโนมัติ)
ตัวอย่าง 2 เปลี่ยนจาก /viewdetail.php?id=1234 เป็น /view/1234.html
รูปแบบ
http://localhost:8081/viewdetail.php?id=1234
ในไฟล์ viewdetail.php เราจะได้ค่า $_GET["id"] = 1234;
ต้องการเปลี่ยนเป็น
http://localhost:8081/view/1234.html
เขียน RewriteEngine เป็น
.htaccess
RewriteEngine On
RewriteRule ^view/(.*).html /viewdetail.php?id=$1
viewdetail.php
<?
echo "id=".$_GET["id"];
?>
เมื่อพิมพ์ URL ว่า http://localhost:8081/view/1234.html
ใน php สามารถใช้การ $_GET["id"] เพื่อใช้งานได้
รูปแบบอื่น ๆ เช่น
/viewdetail.php?id=1234 เป็น /view/detail-1234.html
RewriteEngine On
RewriteRule ^view/detail-(.*).html /viewdetail.php?id=$1
/viewdetail.php?id=1234 เป็น /view/details-1234/
RewriteEngine On
RewriteRule ^view/details-([0-9]+)/$ viewdetail.php?id=$1
RewriteRule ^view/details-([0-9]+)$ /view/$1/ [R]
ตัวอย่าง 3 เปลี่ยนจาก /viewdetail.php?id=1234 เป็น /view-1234.html
รูปแบบ
http://localhost:8081/viewdetail.php?id=1234
ในไฟล์ viewdetail.php เราจะได้ค่า $_GET["id"] = 1234;
ต้องการเปลี่ยนเป็น
http://localhost:8081/view-1234.html
เขียน RewriteEngine เป็น
.htaccess
RewriteEngine On
RewriteRule ^view-(.*).html /viewdetail.php?id=$1
viewdetail.php
<?
echo "id=".$_GET["id"];
?>
เมื่อพิมพ์ URL ว่า http://localhost:8081/view-1234.html
ใน php สามารถใช้การ $_GET["id"] เพื่อใช้งานได้
ตัวอย่าง 4 เปลี่ยนจาก /viewdetail.php?id=1234&keyword=ajax-tutorial เป็น /1234/ajax-tutorial.html
รูปแบบ
http://localhost:8081/viewdetail.php?id=1234&keyword=ajax-tutorial
ในไฟล์ viewdetail.php เราจะได้ค่า $_GET["id"] = 1234; และ $_GET["keyword"] = ajax-tutorial;
ต้องการเปลี่ยนเป็น
http://localhost:8081/1234/ajax-tutorial.html
เขียน RewriteEngine เป็น
.htaccess
RewriteEngine On
RewriteRule ^(.*)/(.*).html /viewdetail.php?id=$1&keyword=$2
viewdetail.php
<?
echo "id=".$_GET["id"];
echo "<br>";
echo "keyword=".$_GET["keyword"];
?>
เมื่อพิมพ์ URL ว่า http://localhost:8081/1234/ajax-tutorial.html
ใน php สามารถใช้การ $_GET["id"] เพื่อใช้งานได้
รูปแบบอื่น ๆ เช่น
/viewdetail.php?id=1234&keyword=ajax-tutorial เป็น /1234/ajax-tutorial/
RewriteEngine On
RewriteRule ^(.*)/(.*)/$ /viewdetail.php?id=$1&keyword=$2
เพิ่มเติม
สำหรับบทความนี้เป็นเพียงแนะนำพื้นฐานการใช้ Mod Rewrite ของ Apache Module ซึ่งการประยุกต์ใช้กับ PHP และ MySQL เพื่อให้ได้เห็นตัวอย่างและแนวทางการทำไปใช้งานจริง สามารถอ่านได้จากบทความตัดไป หรือคลิกได้จากบทความที่เกี่ยวข้อง ที่อยู่ท้ายของบทความ
ระวัง Error
การแก้ไขไฟล์ .htaccess ค่อนข้างจะต้องมีความระมัดระวังเพระาถ้าหาก Syntax ไม่ถูกต้อง ก็อาจจะทำให้เว็บไซต์ Error ทั้งเว็บเลยก็เป็นได้ ตาม Error นี้
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, [email protected] and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
Apache/2.2.4 (Win32) PHP/5.2.3 Server at localhost Port 8081
สำหรับการเขียนรูปแบบอื่น ๆ อยากให้ลองศึกษา URL นี้
http://httpd.apache.org/docs/current/mod/mod_rewrite.html
เพราะความสามารถของ .htaccess นั้นสามารถเขียนได้หลากหลาย เช่นการเปลี่ยนแปลงค่า config ซึ่ง php.ini บางตัว หรือการตรวจสอบ Web Browser ต่าง ๆ ก็สามารถทำได้เช่นเดียวกัน
บทความอื่น ๆ ที่เกี่ยวข้อง
Go to : สร้าง URL Rewrite และ PHP ฐานข้อมูล MySQL Database เพื่อ SEO บน Apache mod_rewrite Module
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
|