typecho更改文章路径后做301跳转以匹配百度收录的改版规则

由 Kerrinz 发布
  | 2025 次浏览

前言

注:本文仅适用于已经开启了typecho的地址重写功能的情况下。

最近网站换了域名,然后把文章路径也改了,原先的文章路径是/archives/{cid}/,我改成了 /archives/{slug}.html,然后百度收录那边做链接改版就需要给原来的旧链接做301跳转。

经历

  • 原本我是想通过apache2的.htaccess文件做跳转,但是奈何怎么写怎么改它都对旧的文章链接毫无反应,域名301跳转倒是能行。
  • 后来在网上找到这篇文章Typecho开启永久链接(伪静态)及旧链接301跳转,但是它并不完全符合我的需求,而且那种方法也不利于拓展和魔改,于是我就用正则搞了一个301跳转。 (小声BB:还有它的那个代码放在config.inc.php实际上实测根本不生效)

解决方案

默认适用于/archives/{cid}/ 转换为/archives/{cid}.html,例如/archives/123/转换为/archives/123.html,可自行更改正则表达式以适应不同的需求。

  1. 打开自己所用的typecho当前主题下的header.php文件,在第一行的行首前面插入以下代码

    <?php
    $myHost = $_SERVER['HTTP_HOST']; // 网站的主机域
    $myUrl = $_SERVER['REQUEST_URI']; // 当前访问网页的相对路径(不含host)
    $pattern = '/^\/archives\/([0-9]+)\/$/'; // 正则匹配规则
    $replacement = '/archives/$1.html'; // 正则替换规则
    if (preg_match($pattern, $myUrl)) { // 匹配成功时
            $newUrl = preg_replace($pattern, $replacement, $myUrl); // 变更后的新地址
            header('HTTP/1.1 301 Moved Permanently'); // http头添加301
            header("location://".$myHost.$newUrl); // 跳转页面
    }
    ?>

    如果同时还需要域名跳转,可以将$myHost变量赋值为你想跳转的域名,例如`$myHost = "yleen.cc";

  2. 保存就行了`

参考文章

Typecho开启永久链接(伪静态)及旧链接301跳转

版权属于: Kerrinz
本文链接:https://kerrinz.com/archives/167.html
作品采用《知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议》进行许可,转载请务必注明出处!

仅有一条评论

  1. typeecho
    typeecho · 2022-12-10 14:10

    感谢分享

发表评论