Typecho 修改固定链接后的SEO技巧

前两天将博客固定链接中最后的那个 id 换成了文章的缩略名,这下可惨了,搜索引擎们都得重新抓取一遍,我可懒得等他,当然,也怕给谷歌百度神马的降权了,于是有了这篇文章:

首先我的思路是通过 PHP 插入一段代码,识别到链接中最后一个参数为数字 id 则自动到数据库中查询并 301 到新地址。

于是问了问 Google 大哥,PHP 怎么获得伪静态的地址,这点问题对谷歌来说毫无压力——$_SERVER['ORIG_PATH_INFO']——就是他,然后便轮到正则了,由于是数字,这部分也很简单:.+\/([0-9]+)\.html

完成了,接下来的步骤便是用 PHP 将这堆东西整理起来:

/* KK's 301 */
preg_match('/.+\/([0-9]+)\.html/i', $_SERVER['ORIG_PATH_INFO'], $matches);
if($matches[1]){
	$post_id = $matches[1];
	$query = $db->sql()->select('slug')->from('table.contents')->where('cid = ?', $post_id);
	$result = $db->fetchRow($query);
	$url = str_replace($post_id, urlencode($result['slug']), $_SERVER['ORIG_PATH_INFO']);
	header('HTTP/1.1 301 Moved Permanently');
	header("Location: {$url}");
	exit();
}

然后——最后一步当然是找个地方放这段代码啦,根据我对 Typecho 的一些了解,应该放在 index.php 中,这是 Typecho 的核心,所有页面都会被伪静态到这个 PHP 中。

因为我们这里用到了 Typecho 的数据库类,所以代码应该放在“include config.inc.php”的后面(这个config文件初始化了数据库类) 其次留意到 Typecho 注释:

/** 开始路由分发 */
Typecho_Router::dispatch();

显然,我们的代码应该放在它前面,不然系统会比你先输出个 404 页面。

好了,我们再打开个以“文章id.html”结尾的页面,看看代码是否正常即可。
(PS:由于我忘了更新CDN缓存,还以为代码错了⊙﹏⊙b)

标签: Typecho SEO PHP


已有 2 条评论
  1. 博主是否提供博客模板的开发,这个博客模板不是wordpress吧。很简约啊。

    1. 理论上是没问题啦,不过我没啥艺术细菌,所以只能做些修改或者山寨别的网站… :evil:

添加新评论