在 wordpress 文章或者评论中经常会插入外链,低质量的外链除了会分走流量外,如果数量过多还非常容易被搜索引擎k站。那要怎么避免这个问题呢?通过代码自动检测全站链接,如果是外链,则自动替换为格式如”https://www.itylq.com/go/?url=外链”的内链形式,即我们常说的外链 go 跳转。
一、外链 go 跳转实现步骤:
1、当前主题 functions.php 文件中插入如下代码:
//给外部链接加上跳转
add_filter('the_content','the_content_nofollow',999);
function the_content_nofollow($content){
preg_match_all('/<a(.*?)href="(.*?)"(.*?)>/',$content,$matches);
if($matches){
foreach($matches[2] as $val){
if(strpos($val,'://')!==false && strpos($val,home_url())===false && !preg_match('/\.(jpg|jepg|png|ico|bmp|gif|tiff)/i',$val)){
$content=str_replace("href=\"$val\"", "href=\"".home_url()."/go/?url=$val\" ",$content);
}
}
}
return $content;
}
2、网站根目录下新建”go”目录,然后在该目录下创建 index.php 文件用来处理页面跳转: //在该文件上可以设置跳转特效
<?php
//截取跳转链接
$t_url = preg_replace('/^url=(.*)$/i','$1',$_SERVER["QUERY_STRING"]);
if(!empty($t_url)) {
preg_match('/(http|https):\/\//',$t_url,$matches);
if($matches){
$url=$t_url;
$title='页面加载中,请稍候...';
} else {
preg_match('/\./i',$t_url,$matche);
if($matche){
$url='http://'.$t_url;
$title='页面加载中,请稍候...';
} else {
$url='https://itylq.com/';
$title='参数错误,正在返回首页...';
}
}
} else {
$title='参数缺失,正在返回首页...';
$url='https://www.itylq.com/';
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="refresh" content="1;url='<?php echo $url;?>';">
<title><?php echo $title;?></title>
</head>
<body>
<div class="loading">
<div class="spinner-wrapper">
<span class="spinner-text">页面加载中,请稍候...</span>
<span class="spinner"></span>
</div>
</div>
</body>
</html>
3、实现效果:
P1.wordpress 文章中的外链已替换为”https://www.itylq.com/go/?url=外链”的形式
通过以上方式,我们已经简单实现了外链 go 跳转。但是还不是很完美,”https://www.itylq.com/go/?url=外链”这样的字符串还是会有外链地址,那要怎么把外链替换成一串无语义的字符串呢?可以对外链进行 base64 加密。
二、外链 base64 加密实现步骤: //在普通 go 跳转代码基础上做下 base64 加密、解密即可
1、functions.php 文件对应 go 跳转代码部分,对外链进行 base64 加密:
2、”go”目录下 index.php 对 base64 加密字符串进行解密,还原出外链地址并实现跳转:
3、实现效果:
P2.wordpress 文章中外链转换为 go 跳转形式,并给外链进行 base64 加密处理