成功解决blog搬家后地址不对应的问题


2009-8-18 06:20 wordpress 没有评论383

提示,这个版本是使用strpos来匹配地址,最新的版本已经改为正则表达式 请点击这里

我原来是使用z-blog的,现在改为wordpress,其实z-blog也是蛮不错的,不过wordpress有更多的插件,相对来说还是要好一些的:)

升级wordpress之后,网站由原来的http://iove.net/post/id.html改为现在的http://iove.net/id,而且经过数据导入之后,ID已经有所变更,所以原来的URL和现在的URL不一致了,导致别人在访问我的网站的时候,有些文章访问不到。而且最锉的是,百度居然不收录我的网站的更新,我记得以前我网站一更新,总是百度先收录,Google一般要后那么一两周,现在倒是怪了,百度收录我的网站还是几个月前的链接,而Google在我更新后几天就收录了。

我认为对于中文网站的收录,百度要优于Google,但这次不知道为什么会这样,不晓得是我的网站放在国外,百度对国外的网站收录有歧视,还是因为我的网站有所谓的“敏感词”呢?

没办法了,做为一个Iter,自然要想办法解决,既然原有的id和现有的id有一一对应的关系,那为什么不使用网址转向呢?godaddy是支持自定义404错误页面的(其它服务商一般也都支持,国内就不一定了),当页面找不到的时候,可以在404页中做文章啊,基本思路如下:

  1. 设置自定义404页面
  2. 在404页面判断网址是否为/post/id.html
  3. 用一个数组(我的文章不多,如果多的话可以考虑使用数据库建表)保存旧id与新id的对应关系
  4. 从网址中分析出旧id,并根据旧id取出新id
  5. 重组网址,用header重定向(301)新网址

我第一次写php代码,代码写的就不咱的了,看官就不要怪了,其实如果用正则,代码将会非常简单,可是我硬是没找到php怎么用正则抽取捕获组,知道的朋友不妨告诉我一下,非常感谢。

$url = $_SERVER['REQUEST_URI'];
$u = strpos($url,'/post/');
//原来的文�
if(empty($u) != false)
{
	$id = str_replace('/post/', '', $url);
	$id = str_replace('.html', '', $id);
	//if(!is_int($id)) return;
	$id  = (int)$id ;
	$array = array(1=>'685',2=>'686',3=>'687');
	$url = 'http://iove.net/'.$array[$id];
        //重定向
	$url = 'Location:'.$url;
	header('HTTP/1.1 301 Moved Permanently');
	header($url);
	return;
}
//原来的标签
$u = strpos($url, 'catalog.asp?tags=');
if(empty($u) != false)
{
	$tag = str_replace('/catalog.asp?tags=', '', $url);
	$url = 'http://iove.net/?tag='.$tag;
	$url = 'Location:'.$url;
	header('HTTP/1.1 301 Moved Permanently');
	header($url);
	return;
}

无觅相关文章插件,快速提升流量

嗯,或者你也可以收听我的微博,腾讯微博(主要用这个,其他的看我的个人介绍)

我写博客常常出现错别字,常常错得还很离谱,有时候我自己看了第二遍都骂我自个儿,但我又不习惯重复审查,纠结啊...各位看到啥错别字或者不明白的地方,请给我留言指出来,感谢感谢。

  

  • 评论敬告那些为做SEO而评论的朋友,本博不欢迎此类评论,请不要利用本博做关键字,一律封杀。

    绝不跨省追捕
    不会发垃圾邮件
    增加你的流量