บทความนี้เป็นบทความที่สองนะครับ เป็นอีกวิธีนึงที่นิยมใช้กันมาก พอพอกับวิธีแรก ขอขอบคุณ http://www.thaicreate.com ครับ สำหรับความรู้ดีดี
http://junctionx.blogspot.com/2011/09/modrewrite.html
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
#
#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
#
#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
#
#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.
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.
?>
จากตัวอย่างจะเห็นว่า ผมได้ส่ง 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>
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 ความคิดเห็น :
แสดงความคิดเห็น