当前位置:中国站长下载文章中心网页编程PHP编程 → PHPBB MOD for Google 完全解决方案 (2)

PHPBB MOD for Google 完全解决方案 (2)

减小字体 增大字体 作者:不详  来源:不详  发布时间:2006-8-14 10:13:50
     如果你的服务器不支持.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)这种方式。
  
  参考文献:
  
  http://www.phpbb.com/phpBB/viewtopic.php?t=199008
  
  http://www.phpbb.com/phpBB/viewtopic.php?t=137334
    做人要厚道,请注明转自chinazhan中国站长(www.ChinaZhan.com)。