帝国CMS转换WordPress或伪静态变更后301永久定向问题的解决方案-PHP方案

我当时的问题就是帝国转成wordpress后由于伪静态规则无法匹配而研究出来的这套方案

写下来也算是一个心德体会和记录,以便以后查看,不喜欢的可以不看

说实话,当时想到过很多方法,但觉的最好的也就只有这一种了

帝国由于伪静态里必须有栏目ID和文章ID,但WP里可以实现只有文章ID的方法

我帝国原来的伪静态设置的是 域名加/page栏目ID_文章ID_分页.html

新的WP伪静态设置的是 域名加/文章ID.html

我用wordpress采集工具将文章按ID采集将帝国的新闻模型原样采集到WP里,所以文章ID是匹配的

这样的样式伪静态规则就可以实现如下:

rewrite ^/page(.+?)_(.+?)_(.+?).html$ http://www.dnwfb.com/$2.html permanent;

但由于还有下载模弄,下载模型文章ID也是从1开始,意味着与新闻模型有重复,比如新闻模型第一篇文章ID是1,下载模型的第一篇文章ID也是1,在帝国里是通过栏目ID来区分的,而我采集到WP里,文章ID只能叠加,由于我下载模型文章相对较少,我就把下载的文章放到了之后采集

假如新闻模型有1800篇文章,文章ID 到1800,下载模型有200篇文章,最后就是下载文章ID采集过来后是从1801开始2000的ID,当然以前帝国下载模型的文章有删除的,所以文章ID不是连续的

顺便说一下,采集插件可以用我用的这个,感觉很不错,WordPress采集插件传送门

先区分下载和新闻栏目再区分中间删除文章的ID

经过反复测试代码如下解决:

preg_match("#/page(.+?)_(.+?)_(.+?).html#sU", $_SERVER['REQUEST_URI'],$arr);
if($arr[1]=='3'||$arr[1]=='5'||$arr[1]=='7'||$arr[1]==='8'||$arr[1]=='10'||$arr[1]=='12'||$arr[1]=='15'||$arr[1]=='16'){
    //1-29,32-58,74-118此数字是文章ID出现不连续的地方
if($arr[2]>='1'&&$arr[2]<='29'){
    $arr301= $arr[2]+1569;
header('HTTP/1.1 301 Moved Permanently');//发出301头部
header("Location: https://www.dnwfb.com/$arr301.html");//跳转到我的新域名地址
exit();
}elseif($arr[2]>='32'&&$arr[2]<='58'){
    $arr301= $arr[2]+1567;
    header('HTTP/1.1 301 Moved Permanently');//发出301头部
header("Location: https://www.dnwfb.com/$arr301.html");//跳转到我的新域名地址
exit();
}elseif($arr[2]>='74'&&$arr[2]<='118'){
    $arr301= $arr[2]+1552;
    header('HTTP/1.1 301 Moved Permanently');//发出301头部
header("Location: https://www.dnwfb.com/$arr301.html");//跳转到我的新域名地址
exit();
}
}else{
$arr301= $arr[2];
if($arr301){
header('HTTP/1.1 301 Moved Permanently');//发出301头部
header("Location: https://www.dnwfb.com/$arr301.html");//跳转到我的新域名地址
exit();
}

}

以上代码放到当前使用的模板目录的functions.php的相应位置即可

还好以前删除的文章不多,总算是实现了301跳转

接下来是栏目列表了,帝国栏目伪静态是域名加/list栏目ID_分页.html

WP栏目伪静态设置成了/article-1.html

代码如下

此内容查看价格为0.01积分立即购买
本文链接:https://www.dnwfb.com/5759.html,转载请注明出处。
1

评论0

没有账号? 注册  忘记密码?