国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

PHPBB MOD for Google 完全解決方案

2024-05-04 23:04:12
字體:
來源:轉載
供稿:網友
作者:trotter
郵箱:[email protected]
出處:www.gbunix.com

轉載請保持文檔完整,注明出處。

前言

  隨著互聯網上的內容以驚人速度的增長也越來越突出了搜索引擎的重要性,如果網站想更好地被搜索引擎收錄,網站設計除了面向用戶友好(user friendly)外,搜索引擎友好(search engine friendly)的設計也是非常重要的。進入搜索引擎的頁面內容越多,則被用戶用不同的關鍵詞找到的幾率越大。不得不承認,將動態網頁鏈接rewriting成靜態鏈接是最保險和穩定的面向搜索引擎優化方式。該方案就是針對phpbb論壇系統的url重定向提出的。

解決方案

  url重定向從技術上將,目前可以通過兩種方式實現,一種是基于url rewrite,另一種是基于path_info。例如http://www.gbunix.com/bbs/ftopic102.html就是基于rewrite實現的,而http://www.gbunix.com/article/article.php/515是基于path_info實現的。

  針對phpbb論壇的改造,我們分別就這兩種技術分別介紹。

一.使用rewrite技術實現:

修改phpbb代碼:

打開/includes/page_header.php文件,

搜索代碼:

//
// generate logged in/logged out status
//

之前加:

ob_start();
function replace_for_mod_rewrite(&$s)
{
$urlin =
array(
"'(?<!/)viewforum.php/?f=([0-9]*)&amp;topicdays=([0-9]*)&amp;start=([0-9]*)'",
"'(?<!/)viewforum.php/?f=([0-9]*)&amp;mark=topics'",
"'(?<!/)viewforum.php/?f=([0-9]*)'",
"'(?<!/)viewtopic.php/?t=([0-9]*)&amp;view=previous'",
"'(?<!/)viewtopic.php/?t=([0-9]*)&amp;view=next'",
"'(?<!/)viewtopic.php/?t=([0-9]*)&amp;postdays=([0-9]*)&amp;postorder=([a-za-z]*)&amp;start=([0-9]*)'",
"'(?<!/)viewtopic.php/?t=([0-9]*)&amp;start=([0-9]*)&amp;postdays=([0-9]*)&amp;postorder=([a-za-z]*)&amp;highlight=([a-za-z0-9]*)'",
"'(?<!/)viewtopic.php/?t=([0-9]*)start=([0-9]*)'",
"'(?<!/)viewtopic.php/?t=([0-9]*)'",
"'(?<!/)viewtopic.php&amp;p=([0-9]*)'",
"'(?<!/)viewtopic.php/?p=([0-9]*)'",
);
$urlout = array(
"viewforum//1-//2-//3.html",
"forum//1.html",
"forum//1.html",
"ptopic//1.html",
"ntopic//1.html",
"ftopic//1-//2-//3-//4.html",
"ftopic//1.html",
"ftopic//1-//2.html",
"ftopic//1.html",
"sutra//1.html",
"sutra//1.html",
);
$s = preg_replace($urlin, $urlout, $s);
return $s;
}

打開/includes/page_tail.php文件,

搜索代碼:

$db->sql_close();

之后加:

$contents = ob_get_contents();
ob_end_clean();
echo replace_for_mod_rewrite($contents);
global $dbg_starttime;

如果你的phpbb是2.06版本,打開includes/functions.php文件,

搜索代碼:

if (!empty($db))
{
$db->sql_close();
}

之后加:

if (stristr($url, 'http://')) {
header('location: ' . $url);
exit;
}

最后在bbs目錄下建立.htaccess 文件,文件內容為:

rewriteengine on
rewriterule ^forums.* index.php
rewriterule ^forum([0-9]*).* viewforum.php?f=$1&mark=topic
rewriterule ^viewforum([0-9]*)-([0-9]*)-([0-9]*).* viewforum.php?f=$1&topicdays=$2&start=$3
rewriterule ^forum([0-9]*).* viewforum.php?f=$1
rewriterule ^ptopic([0-9]*).* viewtopic.php?t=$1&view=previous
rewriterule ^ntopic([0-9]*).* viewtopic.php?t=$1&view=next
rewriterule ^ftopic([0-9]*)-([0-9]*)-([a-za-z]*)-([0-9]*).* viewtopic.php?t=$1&postdays=$2&postorder=$3&start=$4
rewriterule ^ftopic([0-9]*)-([0-9]*).* viewtopic.php?t=$1&start=$2
rewriterule ^ftopic([0-9]*).* viewtopic.php?t=$1
rewriterule ^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 [email protected]
documentroot /home1/ftp/trotter/www
servername www.gbunix.com
rewriteengine on
rewriterule ^/bbs/forums.* /bbs/index.php
rewriterule ^/bbs/forum([0-9]*).* /bbs/viewforum.php?f=$1&mark=topic
rewriterule ^/bbs/viewforum([0-9]*)-([0-9]*)-([0-9]*).* /bbs/viewforum.php?f=$1&topicdays=$2&start=$3
rewriterule ^/bbs/forum([0-9]*).* /bbs/viewforum.php?f=$1
rewriterule ^/bbs/ptopic([0-9]*).* /bbs/viewtopic.php?t=$1&view=previous
rewriterule ^/bbs/ntopic([0-9]*).* /bbs/viewtopic.php?t=$1&view=next
rewriterule ^/bbs/ftopic([0-9]*)-([0-9]*)-([a-za-z]*)-([0-9]*).* /bbs/viewtopic.php?t=$1&postdays=$2&postorder=$3&start=$4
rewriterule ^/bbs/ftopic([0-9]*)-([0-9]*).* /bbs/viewtopic.php?t=$1&start=$2
rewriterule ^/bbs/ftopic([0-9]*).* /bbs/viewtopic.php?t=$1
rewriterule ^/bbs/ftopic([0-9]*).html /bbs/viewtopic.php?t=$1&start=$2&postdays=$3&postorder=$4&highlight=$5
rewriterule ^/bbs/sutra([0-9]*).* /bbs/viewtopic.php?p=$1
errorlog logs/gbunix.com-error_log
customlog logs/gbunix.com-access_log combined
</virtualhost>

如果你用的不是虛擬主機,將rewriterule部分代碼放到httpd.conf文件最后就可以。

注意:非常重要的一點,為了系統的安全,請在bbs發布目錄下建立robots.txt文件,文件內容如下:

disallow: /your-forum-folder/sutra*.html$
disallow: /your-forum-folder/ptopic*.html$
disallow: /your-forum-folder/ntopic*.html$
disallow: /your-forum-folder/ftopic*asc*.html$

給apache安裝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
# export path
# which gcc
# which make

# find ./ -name mod_rewrite.c //在apache的安裝目錄中尋找mod_rewrite.c文件
# cd path/to/mod_rewrite.c //進入包含mod_rewrite.c文件的目錄
# apxs -c mod_foo.c //apxs請指定絕對路徑,在你當前正在使用apache的bin目錄里
# apxs -i -a -n mod_rewrite mod_rewrite.la

如果沒有什么錯誤的話,應該在你的apache的modules目錄中編譯出一個mod_rewrite.so文件。

編輯httpd.conf文件,確認httpd.conf中已經包含mod_rewrite.so的加載語句,如下:

loadmodule rewrite_module modules/mod_rewrite.so

這時,你的apache應該已經支持rewrite了。

二.基于path_info技術實現:

修改phpbb代碼:

打開overall_header.tpl文件,在首行加如下代碼:

<base >

打開config.php文件,在?>前加入如下代碼:

if ($request_method == "get") {
if (strlen(getenv('path_info')) > 1) {
$get_array = array();
$php_self = str_replace(getenv('path_info'), '', $php_self);
$vars = explode('/', substr(getenv('path_info'), 1));
for ($i=0, $n=sizeof($vars); $i<$n; $i++) {
if (strpos($vars[$i], '[]')) {
$get_array[substr($vars[$i], 0, -2)][] = $vars[$i+1];
} else {
$http_get_vars[$vars[$i]] = $vars[$i+1];
}
$i++;
}
if (sizeof($get_array) > 0) {
while (list($key, $value) = each($get_array)) {
$http_get_vars[$key] = $value;
}
}
}

}

if ($request_method == "post") {
if (strlen(getenv('path_info')) > 1) {
$post_array = array();
$php_self = str_replace(getenv('path_info'), '', $php_self);
$vars = explode('/', substr(getenv('path_info'), 1));
for ($i=0, $n=sizeof($vars); $i<$n; $i++) {
if (strpos($vars[$i], '[]')) {
$post_array[substr($vars[$i], 0, -2)][] = $vars[$i+1];
} else {
$http_post_vars[$vars[$i]] = $vars[$i+1];
}
$i++;
}
if (sizeof($get_array) > 0) {
while (list($key, $value) = each($post_array)) {
$http_post_vars[$key] = $value;
}
}
}

}

打開functions.php文件,在?>前加入如下代碼:

function replace_for_mod_rewrite($s) {

$s = str_replace("?", "/", $s);
$s = str_replace("&amp;", "/", $s);
$s = str_replace("&", "/", $s);
$s = str_replace("=", "/", $s);
return $s;

}

打開sessions.php文件,用下面代碼替換原來定義的append_sid()函數:

function append_sid($url, $non_html_amp = false)
{
global $sid;


if ( !empty($sid) && !preg_match('#sid=#', $url) && !preg_match('#sid/#', $url) && !stristr( $_server["http_user_agent"] ,'bot') && !stristr($_server["http_user_agent"] ,'inktomi'))
{
$url .= ( ( strpos($url, '?') != false ) ? ( ( $non_html_amp ) ? '&' : '&amp;' ) : '?' ) . $sid ;
}
$url=replace_for_mod_rewrite($url);
return $url;
}

這時,你的論壇url將會映射成(http://www.domain/bbs/viewtopic.php/t/4)這種方式。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 维西| 乌鲁木齐县| 正蓝旗| 青神县| 蚌埠市| 新河县| 南陵县| 东明县| 孟村| 孝昌县| 昭平县| 永年县| 思南县| 耒阳市| 六盘水市| 乌拉特后旗| 霍州市| 德州市| 宾川县| 呼和浩特市| 和林格尔县| 体育| 孟津县| 元朗区| 西畴县| 肥城市| 分宜县| 汾阳市| 广州市| 阜宁县| 郎溪县| 高阳县| 镇巴县| 九龙城区| 大宁县| 沁源县| 兴仁县| 南投市| 阿图什市| 广西| 五常市|