仓酷云

标题: PHP网页编程之PHPBB MOD for Google 完整处理计划 [打印本页]

作者: 莫相离    时间: 2015-2-3 23:58
标题: PHP网页编程之PHPBB MOD for Google 完整处理计划
在学习HTML中我想边学边做是最有效的方式,当然这一方式对于学习PHP同样是最有效的。   作者:Trotter
邮箱:trotter@kekerde.net
出处:www.gbunix.com

转载请坚持文档完全,注明出处。

媒介

  跟着互联网上的内容以惊人速度的增加也愈来愈凸起了搜刮引擎的主要性,假如网站想更好地被搜刮引擎收录,网站设计除面向用户友爱(User Friendly)外,搜刮引擎友爱(Search Engine Friendly)的设计也长短常主要的。进入搜刮引擎的页面内容越多,则被用户用分歧的关头词找到的概率越大。不能不供认,将静态网页链接rewriting成静态链接是最保险和不乱的面向seo体例。该计划就是针对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]*)&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 = 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("&", "/", $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 ) ? '&' : '&' ) : '?' ) . $SID ;
}
$url=replace_for_mod_rewrite($url);
return $url;
}

这时候,你的服装论坛URL将会映照成(http://www.domain/bbs/viewtopic.php/t/4)这类体例。聪明的你,显然已经逐渐的开悟了,慢慢的理解了编程的概念,那么祝贺你,你已经迈出了成功的第一步。
作者: 冷月葬花魂    时间: 2015-2-4 07:46
兴趣是最好的老师,百度是最好的词典。
作者: 小妖女    时间: 2015-2-9 18:55
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
作者: 因胸联盟    时间: 2015-2-11 10:53
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
作者: 变相怪杰    时间: 2015-3-2 11:12
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
作者: 飘飘悠悠    时间: 2015-3-6 10:25
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
作者: 若相依    时间: 2015-3-10 08:34
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
作者: 活着的死人    时间: 2015-3-17 05:58
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
作者: 灵魂腐蚀    时间: 2015-3-23 22:04
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
作者: 莫相离    时间: 2015-3-24 14:56
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
作者: 谁可相欹    时间: 2015-4-1 13:12
基础有没有对学习php没有太大区别,关键是兴趣。
作者: 深爱那片海    时间: 2015-4-6 05:50
基础有没有对学习php没有太大区别,关键是兴趣。
作者: 不帅    时间: 2015-4-10 23:45
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
作者: 柔情似水    时间: 2015-4-22 07:27
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
作者: 愤怒的大鸟    时间: 2015-5-3 06:43
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
作者: 仓酷云    时间: 2015-5-4 09:47
做为1门年轻的语言,php一直很努力。
作者: 再现理想    时间: 2015-5-6 08:08
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
作者: 金色的骷髅    时间: 2015-5-11 10:54
爱上php,他也会爱上你。
作者: 若天明    时间: 2015-6-4 18:48
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
作者: 精灵巫婆    时间: 2015-6-7 09:10
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2