您的位置:首页 > 编程语言 > VB

自己动手简单实现vbb的URL静态化

2009-07-11 12:40 267 查看
只要作简单的修改,就能实现vbb的URL静态化,当然,需要服务器支持rewrite功能。
使用的论坛版本为vbulletinv3.6.8英文标准版。
-------------------------第一步---------------------------
-------------------------------------------------
在includes/functions.php中找到:
------------------------------------------------

PHP代码:
functionprint_output($vartext,$sendheader=true)
{
global$pagestarttime,$querytime,$vbulletin;
global$vbphrase,$stylevar;

if($vbulletin->options['addtemplatename'])
{

----------------------------------------------------------
改为:
---------------------------------------------------------

PHP代码:
//#########################################
//增加两个Function开始
functionrewrite_forum($extra1,$sid,$fid,$order,$page=0,$extra2='')
{
return'<a'.stripslashes($extra1).'href="f-'.($sid?substr($sid,0,32):0).'-'.$fid.'-'.($order?$order:0).'-'.($page?$page:1).'.html"'.stripslashes($extra2).'>';
}
functionrewrite_thread($extra1,$sid,$tid,$page=0,$extra2='')
{
return'<a'.stripslashes($extra1).'href="t-'.($sid?substr($sid,0,32):0).'-'.$tid.'-'.($page?$page:1).'.html"'.stripslashes($extra2).'>';
}
//增加两个Function结束
//#########################################
functionprint_output($vartext,$sendheader=true)
{
global$pagestarttime,$querytime,$vbulletin;
global$vbphrase,$stylevar;
//#########################################
//增加程序开始
$searcharray[]="/\<a(.*)href\=\"forumdisplay\.php\?(s\=(.*))?f\=(\d+)(&order\=(asc|desc))?(&page\=(\d+))?\"([^\>]*)\>/e";
$replacearray[]="rewrite_forum('\\1','\\3','\\4','\\6','\\8','\\9')";

$searcharray[]="/\<a(.*)href\=\"showthread\.php\?(s\=(.*))?t\=(\d+)(&page\=(\d+))?\"([^\>]*)\>/e";
$replacearray[]="rewrite_thread('\\1','\\3','\\4','\\6','\\7')";

$vartext=preg_replace($searcharray,$replacearray,$vartext);
//增加程序结束
//#########################################
if($vbulletin->options['addtemplatename'])
{

-------------------------------------------------

如果你想同时重写archive,请作如下修改:

------------------------------------------------

在archive/index.php中找到如下语句:

--------------------------------------------

PHP代码:
if(SLASH_METHODANDstrpos($archive_info,'/archive/index.php/')===false)
{
exec_header_redirect($vbulletin->options['bburl'].'/archive/index.php/');
}

-----------------------------
改为
----------------------------------------------------------

PHP代码:
if(SLASH_METHODANDstrpos($archive_info,'/archive/')===false)
{
exec_header_redirect($vbulletin->options['bburl'].'/archive/');
}

-------------------------第二步---------------------------
-----------------------------------------------------
在论坛的根目录下增加文件".htaccess",文件中包含如下内容:
-----------------------------------------------------

代码:
RewriteEngineOn
#修改"/vbb"为你的论坛目录地址,如果程序放在根目录中,请将"/vbb"修改为"/"
RewriteBase/vbb
RewriteRule^f-([0-9a-z]+)-([0-9]+)-(0|asc|desc)-([0-9]+)\.html$forumdisplay.php?s=$1&f=$2&order=$3&page=$4
RewriteRule^t-([0-9a-z]+)-([0-9]+)-([0-9]+)\.html$showthread.php?s=$1&t=$2&page=$3
RewriteRule^archive/((f|t)-[0-9]+\.html)$archive/index.php?$1

---------------------------------------------------
已知Bug,
在forumdisplay.php的分主题分页菜单处;
在forumdisplay.php的主题列表的快速分页链接处;
在showthread.php的主题分页菜单处;
部分动态页没有重写过来,但不影响实际使用。
对archive的重写,没有发现不正常。
如果你对这个Bug介意的话,你可以只选择重写archive,这样你所要修改的仅仅是对archive/index.php中的一点点的修改(方法同上),而不必修改includes/functions.php文件,并把".htaccess"文件放入archive文件夹中,然后在".htaccess"中只保留:
-----------------------------------------------------

代码:
RewriteEngineOn
#修改"/vbb"为你的论坛目录地址,如果程序放在根目录中,请将"/vbb"修改为"/archive"
RewriteBase/vbb/archive
RewriteRule^((f|t)-[0-9]+\.html)$index.php?$1

---------------------------------------------------
这样你在打开archive功能的情况下还是可以为你的论坛提高搜索引擎的搜索效果的。
-------------------------------------------------
很明显我的改法太没水平了,因为这是我第一次写rewrite的,我对正规表达式也是一知半解。不过我对VBB的代码倒是十分的了解,觉得VBB的编程风格还不错,用来学习PHP4,是一个不错的选择,不过要学PHP5的话,看WBB3的代码绝对是首选。
本来打算把VBB的URL重写进一步完善,写成一个VBB插件,并增加后台的开关功能(setting)的,不过学校开学了,我上大四了,想再过一次独木桥,比较忙,而且网线过几天就到期了,不想续了,租个房子,闭关半年,所以,就不写了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: