ผู้เขียน : ทรอตเตอร์
อีเมล์: [email protected]
ที่มา: www.gbunix.com
โปรดเก็บเอกสารให้ครบถ้วนและระบุแหล่งที่มาเมื่อพิมพ์ซ้ำ
คำนำ
เนื่องจากเนื้อหาบนอินเทอร์เน็ตเติบโตในอัตราที่น่าตกใจ ความสำคัญของเครื่องมือค้นหาจึงมีความโดดเด่นมากขึ้นเรื่อยๆ หากเว็บไซต์ต้องการถูกจัดทำดัชนีโดยเครื่องมือค้นหาให้ดีขึ้น นอกเหนือจากการเป็นมิตรกับผู้ใช้ (User Friendly) แล้ว การออกแบบเว็บไซต์จะต้องเป็นมิตรกับเครื่องมือค้นหา การออกแบบ (Search Engine Friendly) ก็มีความสำคัญเช่นกัน ยิ่งเนื้อหาของหน้าเข้าสู่เครื่องมือค้นหามากเท่าใด โอกาสที่ผู้ใช้จะค้นพบโดยใช้คำหลักที่แตกต่างกันก็จะยิ่งมากขึ้นเท่านั้น ฉันต้องยอมรับว่าการเขียนลิงก์เว็บแบบไดนามิกใหม่เป็นลิงก์แบบคงที่เป็นวิธีที่ปลอดภัยที่สุดและมีเสถียรภาพมากที่สุดในการเพิ่มประสิทธิภาพเครื่องมือค้นหา โซลูชันนี้เสนอสำหรับการเปลี่ยนเส้นทาง URL ของระบบฟอรัม phpBB
การเปลี่ยนเส้นทาง URLของโซลูชัน
สามารถนำมาใช้ในทางเทคนิคได้สองวิธี วิธีหนึ่งขึ้นอยู่กับการเขียน URL ใหม่และอีกวิธีหนึ่งขึ้นอยู่กับ PATH_INFO ตัวอย่างเช่น http://www.gbunix.com/bbs/ftopic102.html ถูกนำมาใช้โดยอิงจากการเขียนซ้ำ และ http://www.gbunix.com/article/article.php/515 ถูกนำมาใช้โดยอิงจาก PATH_INFO
สำหรับการเปลี่ยนแปลงของฟอรัม PHPBB เราจะแนะนำเทคโนโลยีทั้งสองนี้ตามลำดับ
1. การใช้งานโดยใช้เทคโนโลยีการเขียนซ้ำ:
แก้ไขโค้ด phpBB:
เปิดไฟล์ /includes/page_header.php และ
ค้นหาโค้ด:
//
//สร้างสถานะการเข้าสู่ระบบ/ออกจากระบบ
//
เพิ่มก่อน:
ob_start();
ฟังก์ชั่นreplace_for_mod_rewrite(&$s)
-
$urlin =
อาร์เรย์(
"'(?<!/)viewforum.php?f=([0-9]*)&topicdays=([0-9]*)&start=([0-9]*)'",
"'(?<!/)viewforum.php?f=([0-9]*)&mark=topics'",
"'(?<!/)viewforum.php?f=([0-9]*)'",
"'(?<!/)viewtopic.php?t=([0-9]*)&view=previous'",
"'(?<!/)viewtopic.php?t=([0-9]*)&view=next'",
"'(?<!/)viewtopic.php?t=([0-9]*)&postdays=([0-9]*)&postorder=([a-zA-Z]*)& ;start=([0-9]*)'",
"'(?<!/)viewtopic.php?t=([0-9]*)&start=([0-9]*)&postdays=([0-9]*)&postorder =([a-zA-Z]*)&highlight=([a-zA-Z0-9]*)'",
"'(?<!/)viewtopic.php?t=([0-9]*)start=([0-9]*)'",
"'(?<!/)viewtopic.php?t=([0-9]*)'",
"'(?<!/)viewtopic.php&p=([0-9]*)'",
"'(?<!/)viewtopic.php?p=([0-9]*)'",
-
$urlout = อาร์เรย์(
"วิวฟอรัม\1-\2-\3.html",
"ฟอรั่ม\1.html",
"ฟอรั่ม\1.html",
"ptopic\1.html",
"ntopic\1.html",
"ftopic\1-\2-\3-\4.html",
"ftopic\1.html",
"ftopic\1-\2.html",
"ftopic\1.html",
"พระสูตร\1.html",
"พระสูตร\1.html",
-
$s = preg_replace($urlin, $urlout, $s);
ส่งคืน $s;
}
เปิดไฟล์ /includes/page_tail.php และ
ค้นหาโค้ด:
$db->sql_close();
จากนั้นเพิ่ม:
$contents = ob_get_contents();
ob_end_clean();
echo แทนที่_for_mod_rewrite($เนื้อหา);
global $dbg_starttime;
หาก phpBB ของคุณเป็นเวอร์ชัน 2.06 ให้เปิดไฟล์ include/functions.php และ
ค้นหาโค้ด:
if (!empty($db))
-
$db->sql_close();
}
:
if (stristr($url, 'http://')) {
header('ตำแหน่ง:' .$url);
ออก;
}
สุดท้ายให้สร้างไฟล์ .htaccess ในไดเร็กทอรี bbs เนื้อหาไฟล์คือ:
RewriteEngine On
RewriteRule ^forums.* index.php
กฎการเขียนใหม่ ^forum([0-9]*).* viewforum.php?f=$1&mark=topic
กฎการเขียนใหม่ ^viewforum([0-9]*)-([0-9]*)-([0-9]*).* viewforum.php?f=$1&topicdays=$2&start=$3
กฎการเขียนใหม่ ^forum([0-9]*).* viewforum.php?f=$1
RewriteRule ^ptopic([0-9]*).* viewtopic.php?t=$1&view=previous
กฎการเขียนใหม่ ^ntopic([0-9]*).* viewtopic.php?t=$1&view=next
กฎการเขียนซ้ำ ^ftopic([0-9]*)-([0-9]*)-([a-zA-Z]*)-([0-9]*).* viewtopic.php?t=$1&postdays =$2&postorder=$3&start=$4
กฎการเขียนใหม่ ^ftopic([0-9]*)-([0-9]*).* viewtopic.php?t=$1&start=$2
กฎการเขียนใหม่ ^ftopic([0-9]*).* viewtopic.php?t=$1
กฎการเขียนใหม่ ^ftopic([0-9]*).html viewtopic.php?t=$1&start=$2&postdays=$3&postorder=$4&highlight=$5
RewriteRule ^sutra([0-9]*).* viewtopic.php?p=$1
หากเซิร์ฟเวอร์ของคุณไม่รองรับ .htaccess โปรดเปิดไฟล์ httpd.conf และแก้ไขส่วนของโฮสต์เสมือนของคุณดังนี้:
<VirtualHost 1.2.3.4 >
ServerAdmin เว็บมาสเตอร์@โดเมน.com
DocumentRoot /home1/ftp/trotter/www
ชื่อเซิร์ฟเวอร์ www.gbunix.com
เขียนใหม่EngineOn
กฎการเขียนใหม่ ^/bbs/forums.* /bbs/index.php
เขียนกฎใหม่ ^/bbs/forum([0-9]*).* /bbs/viewforum.php?f=$1&mark=topic
กฎการเขียนใหม่ ^/bbs/viewforum([0-9]*)-([0-9]*)-([0-9]*).* /bbs/viewforum.php?f=$1&topicdays=$2&start=$3
กฎการเขียนใหม่ ^/bbs/forum([0-9]*).* /bbs/viewforum.php?f=$1
เขียนกฎใหม่ ^/bbs/ptopic([0-9]*).* /bbs/viewtopic.php?t=$1&view=previous
เขียนกฎใหม่ ^/bbs/ntopic([0-9]*).* /bbs/viewtopic.php?t=$1&view=next
กฎการเขียนใหม่ ^/bbs/ftopic([0-9]*)-([0-9]*)-([a-zA-Z]*)-([0-9]*).* /bbs/viewtopic. php?t=$1&postdays=$2&postorder=$3&start=$4
กฎการเขียนใหม่ ^/bbs/ftopic([0-9]*)-([0-9]*).* /bbs/viewtopic.php?t=$1&start=$2
เขียนกฎใหม่ ^/bbs/ftopic([0-9]*).* /bbs/viewtopic.php?t=$1
กฎการเขียนใหม่ ^/bbs/ftopic([0-9]*).html /bbs/viewtopic.php?t=$1&start=$2&postdays=$3&postorder=$4&highlight=$5
กฎการเขียนใหม่ ^/bbs/sutra([0-9]*).* /bbs/viewtopic.php?p=$1
บันทึก ErrorLog/gbunix.com-error_log
CustomLog logs/gbunix.com-access_log รวมกัน
</VirtualHost>
หากคุณไม่ได้ใช้โฮสต์เสมือน เพียงใส่ส่วน RewriteRule ของโค้ดที่ท้ายไฟล์ httpd.conf
หมายเหตุ: เพื่อความปลอดภัยของระบบ โปรดสร้างไฟล์ robots.txt ในไดเร็กทอรี bbs release ดังต่อไปนี้:
Disallow: /your-forum-folder/sutra*.html$
ไม่อนุญาต: /your-forum-folder/ptopic*.html$
ไม่อนุญาต: /your-forum-folder/ntopic*.html$
Disallow: /your-forum-folder/ftopic*asc*.html$
ติดตั้งโมดูล mod_rewrite สำหรับ apache
หากยังไม่ได้ติดตั้งเซิร์ฟเวอร์ apache จะง่ายมาก เพียงคอมไพล์โมดูล mod_rewrite เมื่อรวบรวมเอกสารที่เกี่ยวข้อง สามารถพบได้ที่ พบได้ที่ www.gbunix.com หาก apache ของคุณได้รับการติดตั้งแล้ว และตอนนี้คุณเพียงต้องการคอมไพล์โมดูล mod_rewrite.so และโหลดใน apache เราจะแนะนำวิธีนี้ด้านล่าง
ยกตัวอย่างระบบปฏิบัติการ Solaris:
# PATH=/usr/local/bin:/usr/sfw/bin:/usr/ccs/bin:$PATH
#เส้นทางการส่งออก
#จีซีซีไหน
# ซึ่งทำให้
# find ./ -name mod_rewrite.c //มองหาไฟล์ mod_rewrite.c ในไดเร็กทอรีการติดตั้ง apache
# cd PATH/to/mod_rewrite.c //ป้อนไดเร็กทอรีที่มีไฟล์ mod_rewrite.c
# apxs -c mod_foo.c //โปรดระบุเส้นทางที่แน่นอนสำหรับ apxs ในไดเร็กทอรี bin ที่คุณกำลังใช้ apache อยู่
# apxs -i -a -n mod_rewrite mod_rewrite.la
หากไม่มีข้อผิดพลาด ควรรวบรวมไฟล์ mod_rewrite.so ในไดเร็กทอรีโมดูลของ apache ของคุณ
แก้ไขไฟล์ httpd.conf และยืนยันว่า httpd.conf มีคำสั่งการโหลดของ mod_rewrite.so อยู่แล้ว ดังนี้:
LoadModule rewrite_module modules/mod_rewrite.so
ในขณะนี้ apache ของคุณควรรองรับการเขียนใหม่แล้ว
2. การใช้งานโดยใช้เทคโนโลยี PATH_INFO:
แก้ไขโค้ด phpBB:
เปิดไฟล์ Overall_header.tpl และเพิ่มโค้ดต่อไปนี้ในบรรทัดแรก:
<base href=" http://www.your-forum.com/forum-dir/ ">
เปิดไฟล์ config.php เพิ่มโค้ดต่อไปนี้ก่อน ?>:
if ($REQUEST_METHOD == "GET") {
ถ้า (strlen(getenv('PATH_INFO')) > 1) {
$GET_array = อาร์เรย์();
$PHP_SELF = str_replace(getenv('PATH_INFO'), '', $PHP_SELF);
$vars = explode('/', substr(getenv('PATH_INFO'), 1));
สำหรับ ($i=0, $n=sizeof($vars); $i<$n; $i++) {
ถ้า (strpos($vars[$i], '[]')) {
$GET_array[substr($vars[$i], 0, -2)][] = $vars[$i+1];
} อื่น {
$HTTP_GET_VARS[$vars[$i]] = $vars[$i+1];
-
$i++;
-
ถ้า (ขนาดของ ($GET_array) > 0) {
ในขณะที่ (รายการ($key, $value) = แต่ละ($GET_array)) {
$HTTP_GET_VARS[$key] = $value;
-
-
}
}
ถ้า ($REQUEST_METHOD == "โพสต์") {
ถ้า (strlen(getenv('PATH_INFO')) > 1) {
$POST_array = อาร์เรย์();
$PHP_SELF = str_replace(getenv('PATH_INFO'), '', $PHP_SELF);
$vars = explode('/', substr(getenv('PATH_INFO'), 1));
สำหรับ ($i=0, $n=sizeof($vars); $i<$n; $i++) {
ถ้า (strpos($vars[$i], '[]')) {
$POST_array[substr($vars[$i], 0, -2)][] = $vars[$i+1];
} อื่น {
$HTTP_POST_VARS[$vars[$i]] = $vars[$i+1];
-
$i++;
-
ถ้า (ขนาดของ ($GET_array) > 0) {
ในขณะที่ (รายการ($key, $value) = แต่ละ($POST_array)) {
$HTTP_POST_VARS[$key] = $value;
-
-
}
}
เปิดไฟล์ function.php และเพิ่มโค้ดต่อไปนี้ก่อน ?>:
function replacement_for_mod_rewrite($s) {
$s = str_replace("?", "/", $s);
$s = str_replace("&", "/", $s);
$s = str_replace("&", "/", $s);
$s = str_replace("=", "/", $s);
return $s;
}
เปิดไฟล์ sessions.php และแทนที่ฟังก์ชัน append_sid() ที่กำหนดไว้เดิมด้วยโค้ดต่อไปนี้:
function append_sid($url, $non_html_amp = false)
-
$SID ทั่วโลก;
if ( !empty($SID) && !preg_match('#sid=#', $url) && !preg_match('#sid/#', $url) && !stristr( $_SERVER["HTTP_USER_AGENT"] ,'บอท ') && !stristr($_SERVER["HTTP_USER_AGENT"] ,'inktomi'))
-
$url .= ( ( strpos($url, '?') != false ) ? ( ( $non_html_amp ) ? '&' : '&' ) : '?' ) .
-
$url=replace_for_mod_rewrite($url);
ส่งคืน $url;
}
ในขณะนี้ URL ฟอรัมของคุณจะถูกแมปกับ ( http://www.domain/bbs/viewtopic.php/t/4 )
แหล่งอ้างอิง: