更换了一下永久链接的结构,之前的url结尾是/
现在改成了.html
,typecho不像WordPress那样会自动跳转,我们需要自己做一下链接的跳转,以防原来的链接404
找到主题目录下的404.php
然后在顶部添加以下代码:
<?php
$error_url = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$lastChar = substr($error_url, -1);
if(strcmp($lastChar,"/" ) == 0){//判断是否不等于空或者null
$nameid = substr($error_url,0,strlen($error_url)-1);
header('HTTP/1.2 301 Moved Permanently'); //添加301状态码
header("location://".$nameid.".html");//跳转页面
echo $error_url." ";
echo $lastChar." ";
echo $nameid." ";
}
?>
保存即可
忽略URL参数跳转
我发现在原链接后有以?
开头的参数时会无法跳转,原因是上面的代码读到来了URL参数,我们可以处理一下将参数删除再处理。
我们需要判断是否存在?
后再对url进行处理,这里使用strpos
函数来判断问号的位置,如果存在问号,那么返回的值一定是大于-1的,然后再根据问号的位置使用substr
函数截取问号之前的URL字符串。
if(strpos($error_url,"?")>-1){ // 判断是否存在?
$error_url = substr($error_url,0,strpos($error_url,"?"));
}
修改后的代码为:
<?php
$error_url = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
if(strpos($error_url,"?")>-1){ // 判断是否存在?
$error_url = substr($error_url,0,strpos($error_url,"?"));
}
$lastChar = substr($error_url, -1);
if(strcmp($lastChar,"/" ) == 0){//判断是否不等于空或者null
$nameid = substr($error_url,0,strlen($error_url)-1);
header('HTTP/1.2 301 Moved Permanently'); //添加301状态码
header("location://".$nameid.".html");//跳转页面
// 下面是测试输出
echo $error_url." ";
echo $lastChar." ";
echo $nameid." ";
}
?>
10 条评论
这新主题和我有点像啊
handsome算是typecho最强大这一梯队的主题了,用了好几年了
换主题了?|´・ω・)ノ
是的
wp咋搞啊,我现在文章从/xxx.html到了/blog/xxx.html如何跳转啊
我这个代码是判断404状态下路由的最后一位是不是斜杠,如果是就替换为html然后跳转,同理,你这个也可以使用这种方法
搞不懂
你的可以直接在你的域名url的斜杠后面直接插入
blog/
字符串,然后替换跳转,这个位置可以直接数域名的长度,从0开始效果就如下方所示:
我已经放弃了(╯‵□′)╯︵┴─┴
hh