• August 10, 2017

    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)

    http://www.thaicreate.com/community/seo-programming.html

    การทำ 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)
    http://www.thaicreate.com/community/apache-httpd-create-new-virtualhost-create-new-port.html

    โดยสร้างเป็น Port ที่ 8081 และ Root Document อยู่ที่ C:/Appserv/www/modrewrite/

    httpd.conf

    Listen 8081
    <VirtualHost localhost:8081>
    DocumentRoot C:/Appserv/www/modrewrite/
    </VirtualHost>

     ทดสอบการทำงานของ Port ใหม่

    Apache Mod Rewrite URL SEO

    ในรูปยังไม่มีไฟล์อะไรเป็นโฟเดอร์ว่างเปล่า

    ย้ำเดียวจะงง ว่าการสร้าง 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 รอบ

    Apache Mod Rewrite URL SEO

    การแก้ไขและเปิด mod_rewirte ด้วยการเพิ่ม mod_rewrite.so บน apache

    Apache Mod Rewrite URL SEO

    จากนั้นก็ทดสอบเรียก 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 เป็น

    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/

    Apache Mod Rewrite URL SEO

    ใน 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 เป็น

    RewriteEngine On
    
    RewriteRule ^view/(.*).html /viewdetail.php?id=$1

    viewdetail.php

    <?
    echo "id=".$_GET["id"];
    ?>

    เมื่อพิมพ์ URL ว่า http://localhost:8081/view/1234.html

    Apache Mod Rewrite URL SEO

    ใน 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 เป็น

    RewriteEngine On
    
    RewriteRule ^view-(.*).html /viewdetail.php?id=$1

    ตัวอย่าง 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 เป็น

    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

    Apache Mod Rewrite URL SEO
    ใน 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 นี้

    สำหรับการเขียนรูปแบบอื่น ๆ อยากให้ลองศึกษา URL นี้
    http://httpd.apache.org/docs/current/mod/mod_rewrite.html

    เพราะความสามารถของ .htaccess นั้นสามารถเขียนได้หลากหลาย เช่นการเปลี่ยนแปลงค่า config ซึ่ง php.ini บางตัว หรือการตรวจสอบ Web Browser ต่าง ๆ ก็สามารถทำได้เช่นเดียวกัน

    http://www.thaicreate.com/community/mod-rewrite-url-friendly-seo-apache-module.html



เวอไนน์ไอคอร์ส

ประหยัดเวลากว่า 100 เท่า!






เวอไนน์เว็บไซต์⚡️
สร้างเว็บไซต์ ดูแลเว็บไซต์

Categories