分享
 
 
 

PHPBB MOD for Google 完全解决方案

王朝php·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

作者:Trotter

邮箱:trotter@kekerde.net

出处: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 webmaster@domain.com

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 href="http://www.your-forum.com/forum-dir/">

打开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 ) ? ( ( $n

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有