更换了一下永久链接的结构,之前的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." ";
}
?>