前言
注:本文仅适用于已经开启了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,可自行更改正则表达式以适应不同的需求。
打开自己所用的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";
- 保存就行了`
参考文章
Typecho开启永久链接(伪静态)及旧链接301跳转,
版权属于:月琳cc
本文链接:https://kerrinz.com/archives/167.html
作品采用《知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议》进行许可,转载请务必注明出处!
typeecho · 2022-12-10 14:10
感谢分享