Friday, September 30, 2011

Apache Using 404 Error URL Rewrite - SEO Friendly URL for PHP

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

# Some examples:
#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

# Some examples:
#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
# Some examples:
#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


Apache 404 Error URL Rewrite

ผลลัพธ์ทีได้คือ /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.else
29.{
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.?>



Apache 404 Error URL Rewrite


จากตัวอย่างจะเห็นว่า ผมได้ส่ง 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
<IfModule mod_rewrite.c>
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 เลย

0 comments:

Post a Comment

 
Design by GURU