Apache Using 404 Error URL Rewrite - SEO Friendly URL for PHPเป็น เทคนิค Apache การเรียกใช้งาน 404 Error (Page Not Found) มาใช้สร้าง URL Rewrite เหมาะสมต่อ SEO Friendly เป็นอย่างยิ่ง ในการกำหนด Keywords ไปกับ URL เทคนิคนี้จะเป็นการนำประโยชน์ของข้อผิดพลากจากการไม่พบ URL นั้น ๆ มาใช้งานในส่วนของ 404 Error ซึ่งใน Apache Web Server สามารถกำหนดคุณสมบัติว่าถ้า URL ที่เรียกบนเว็บเพจไม่มีอยู่จริง จะให้สามารถเรียกค่า Default แสดงข้อผิดพลาดใก้กับผู้ใช้ทราบ และปกติแล้วผู้ใช้ส่วนมากจะกำหนดเป็น 404.html แต่ผมจะเปลี่ยนจาก 404 มาเป็นไฟล์ index.php และใช้คุณสมบัติของ php นำ URL ที่ได้มาใช้งานในการเรียกไฟล์อื่น ๆ มาแสดงบนเว็บเพจ
แก้ Config ของ Apache ในส่วนของ ErrorDocument ครับ
httpd.conf
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
#
แก้เป็น
httpd.conf
#ErrorDocument 500 "The server made a boo boo."
ErrorDocument 404 /index.php
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
#
Restart Apache ก่อนน่ะครับ
ถ้าจะทำความเข้าใจ ผมยกตัวอย่างเช่น http://localhost/php/install-php.html ถ้า URL นี้ไม่มีอยู่จริง Apache ก็จะทำการเรียกไฟล์ php ขึ้นมาแทน และในไฟล์ index.php ผมใช้คำสั่ง $_SERVER["REQUEST_URI"] ซึ่งจะได้ค่า /php/install-php.html ออกมา และให้นำค่านี้ไปเป็น เงื่อนไขเรียก web page ที่ต้องการ
ถ้ายังงง ๆ อยู่ เดียวมาดูตัวอย่างดีว่าน่ะครับ
** ก่อนอื่นเพื่อความเข้าใจ เราจะต้องรัน script บน path ที่เป็น Root Path ถ้าหากเขียนบน Appserv จะต้องสร้างไฟล์ไว้ที่ C:\Appserv\www หรือจะลองสร้างเป็น Port ใหม่อ่านบทความได้ที่ Apache httpd Create New VirtualHost (Create New Port) ในที่นี่ผมจะทดสอบด้วย port 9999
เริ่มเลยน่ะครับ
ขั้นตอนที่ 1 กำหนด httpd.conf
httpd.conf
#ErrorDocument 500 "The server made a boo boo."
ErrorDocument 404 /index.php
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
#
แล้ว Restart Apache
ขั้นตอนที่ 2 ให้สร้างไฟล์มาดังนี้
index.php
1.<?2.echo $_SERVER['REQUEST_URI'];3.?>แล้งลองทดสอบโดยรันที่ http://localhost:9999/php/php-install.html
ผลลัพธ์ทีได้คือ /php/php-install.html ซึ่งสามารถนำไป split หรือตัดเป็นค่าตัวแปรไปใช้งานได้เลยครับ
มาดู Code เต็ม ๆ น่ะครับ
index.php
01.<?02.header('HTTP/1.1 200 OK');03.header("Status: 200 OK");04. 05.echo "Now URL = ".$_SERVER['REQUEST_URI'];06. 07. 08.//*** Link Page ***//09.echo "<hr>";10.echo "<a href=/hello.html>Hello PHP</a> , <a href=/config.html>Config PHP</a> , <a href=/install.html>Install PHP</a>";11.echo "<hr>";12. 13. 14.//*** Include Content ***//15. 16.if($_SERVER['REQUEST_URI'] == "/hello.html")17.{18.require("hello.php");19.}20.elseif($_SERVER['REQUEST_URI'] == "/config.html")21.{22.require("config.php");23.}24.elseif($_SERVER['REQUEST_URI'] == "/install.html")25.{26.require("install.php");27.}28.else29.{30.// Default include;31.}32.?>hello.php
01.<?02.echo "03.Hello PHP<br>04.Hello PHP<br>05.Hello PHP<br>06.Hello PHP<br>07.Hello PHP<br>08.Hello PHP<br>09.Hello PHP<br>10.Hello PHP<br>11.Hello PHP<br>12.Hello PHP<br>13.Hello PHP<br>14.Hello PHP<br>15.";16.?>config.php
01.<?02.echo "Config PHP<br>03.Config PHP<br>04.Config PHP<br>05.Config PHP<br>06.Config PHP<br>07.Config PHP<br>08.Config PHP<br>09.Config PHP<br>10.Config PHP<br>11.Config PHP<br>12.Config PHP<br>13.Config PHP<br>";14.?>install.php
01.<?02.echo "Install PHP<br>03.Install PHP<br>04.Install PHP<br>05.Install PHP<br>06.Install PHP<br>07.Install PHP<br>08.Install PHP<br>09.Install PHP<br>10.Install PHP<br>11.Install PHP<br>12.Install PHP<br>13.Install PHP<br>";14.?>
จากตัวอย่างจะเห็นว่า ผมได้ส่ง URL เป็น .html ซึ่งไฟล์นี้ไม่มีอยู่จริง และโปรแกรมจะทำการเรียกไฟล์ index.php และในไฟล์ index.php ผมได้กำหนดเงื่อน
ไขในการเรียกไฟล์ต่าง ๆ มาแสดง ในตัวอย่างผมได้กำหนดเพียง path เดียว ไม่ได้มี sub ย่อยแต่อย่างใด ซึ่งทั้งนี้สามารถดัดแปลงให้ใช้ได้หลายหลายและความซับซ้อนครับ
เช่น http://localhost:9999/php/forum/12345.html เป็นต้น
หลายท่านอาจจะยังส่งสัยน่ะครับว่าถ้านำไปใช้งานจริง จะแก้ httpd.conf ได้อย่างไร อีนนี้เมื่อใช้บน Host ทีเป็น Linux ที่ใช้ Apache เป็น Web Server ให้กำหนดได้ที่ .htaccess
โดยสร้างไฟล์ขึ้นมาใหม่ หรือถ้ามีอยู่แล้วก็แก้ไขเพิ่มเข้าไปครับ (.htaccess ถุกจัดเก็บไว้ที่ home/root directory)
.htaccess
RewriteEngine On
ErrorDocument 404 /index.php
</IfModule>
และก็อย่าลืมใส่
1.<?2.header('HTTP/1.1 200 OK');3.header("Status: 200 OK");4.?>ในส่วนของ index.php ด้วยน่ะครับ เฉพาะไม่ฉะนั้น Bot ต่างๆ จะมองว่า Page ที่แสดงนั้นเป็น 404 ซึ่งจะไม่ถูก index ลงใน Database ของระบบ Search เลย



7:45 PM
Computer !
0 comments:
Post a Comment