CSDN博客

img shysky

Search engine-friendly URLs

发表于2004/12/31 2:05:00  788人阅读

话题不得不从很早前就开始,原来的论坛 ( http://oldbbs.netbuddy.org/cgi-bin/ultrabo...d/ultraboard.pl ) 用的是UltraBoard 2000,如果用Google查询,可能会查到旧论坛的首页,其它的页面Google上无法找到,为什么呢?
因为无论用什么论坛,基本上论坛都是由动态生成的页面组成的,而且论坛都有认证功能,一般来说,访问某个主题的连接可能是这样的:
http://oldbbs.netbuddy.org/cgi-bin/UltraBo...15&TID=636&SID=

这里面有很多Google等搜索引擎所不喜欢的符号,比如&,?,=等等,Google等搜索引擎最喜欢的就是静态的HTML页面了(比如 http://mize.netbuddy.org/ 那种),Google最讨厌的就是"ID=0DCB19209AE0"这样的字符串,因为类似这样字符串都是被一些动态页面(比如 postnuke/phpnuke、各种论坛等)用来表示一个session的,也许Google用来INDEX站点的蜘蛛(spider)——Googlebot每次访问某个动态页面的同一个页面时URL中的ID=都会不同。

比如
http://oldbbs.netbuddy.org/cgi-bin/UltraBo...15&TID=636&SID=
http://oldbbs.netbuddy.org/cgi-bin/UltraBo...636&SID=0292381

访问的是同一个页面

所以,Google等搜索引擎是最恨&,?,=这样的字符了,更讨厌ID=XXXX这样的字符串出现在某个URL里面,如果某个URL包含大量的这样的字符,那么Google可能会拒绝INDEX这个页面。

这也是很多论坛的主题很难从Google上搜索到的原因,这也是xxbin下定决心要把论坛的URLs改成搜索引擎友好的最直接原因和动力,要知道自己的贴子如果能够从Google上Search到那是多么开心的一件事情啊! biggrin.gif

首先我们来分析一下我们的论坛的URLs:
http://bbs.netbuddy.org/index.php?act=ST&f...=4&t=403&arch=0

这个联结是xxbin登陆论坛后访问网络论坛中"Google正在INDEX我们的论坛"这张贴子时的URL

这个URL对Google来说最严重的莫过于URL中包含的""这样的字符串了,这个东东Google看见了肯定就不再理我们了,需要去掉,测试了一下,可能是因为cookie的原因,登陆用户不用""这样的字符串也能正常访问论坛,同时论坛也能够识别这个用户,这样的话最重要的问题就解决了。 smile.gif

URL可能变成这样:
http://bbs.netbuddy.org/index.php?act=ST&f...=4&t=403&arch=0

接下来就是&,?,=等等Google不喜欢的字符串了,如果我们能够把上面的URL转换成
http://bbs.netbuddy.org/index/act/ST/f/4/t/403/arch/0

那Google就会喜欢我们了! biggrin.gif

怎么转
首先,在根目录下建立一个index文件,内容如下:
CODE

<?php

require "conf_global.php";
$base_url = $INFO['board_url']."/index.php";  

$redirect = "";

if ( $_SERVER['PATH_INFO'] != "" )
{
       $c = 0;
       $redirect = "?";
       foreach( explode( "/", $_SERVER['PATH_INFO'] ) as $bit)
       {
               if ($bit != "")
               {
                       if ($c == 0)
                       {
                               $c++;
                               $redirect .= $bit.'=';
                       }
                       else
                       {
                               $c = 0;
                               $redirect .= $bit.'&';
                       }
               }
       }
}

header("Location: $base_url".$redirect);

exit();

?>



稍微懂一点php或者c的语法的人都能看出来,这个脚本是把类似
http://bbs.netbuddy.org/index/act/ST/f/4/t/403/arch/0
这样的URL重定向到
http://bbs.netbuddy.org/index.php?act=ST&f...=4&t=403&arch=0

我们的HTTP Server是Apache 2.0.43
在Apache 1.x版本,对于
http://bbs.netbuddy.org/index/act/ST/f/4/t/403/arch/0
的URL,首先apache会查找是否存在/index这样一个目录,若这个目录不存在,那么查找是否存在/index这样一个文件,如果存在这个文件,就把后面的字符串作为参数传递给/index这个文件,而Apache 2.0.43就改了一下,如果没有/index这个目录,那么就报404错误。 sad.gif 为了解决这个问题xxbin可在Google上查了很久,最后发现在Apache 2.0.43的配置文件中加入AcceptPathInfo On就可以解决这个问题。

最后,为了让apache知道这个没有任何扩展名的index文件是个php脚本,需要在配置文件或者.htaccess文件中加入下面的配置:

<Files index>
ForceType application/x-httpd-php
</Files>

重起apache之后,发现用http://bbs.netbuddy.org/index/act/ST/f/4/t/403/arch/0的连接可以正常访问论坛了,接下来的工作就是把论坛首页,论坛索引,贴子列表等等页面的连接从原来Google不喜欢的格式改成Search engine-friendly URLs,OK,大功告成!

(注:因为index脚本用的是Redirect,因此各位在地址栏看到论坛的连接还是那种Google讨厌的格式,但是论坛的真实联结(移动鼠标到某个联结,然后从状态栏看到的连接)基本上已经改成Search engine-friendly URLs了)
0 0

相关博文

我的热门文章

img
取 消
img即使是一小步
也想与你分享
打开
img