WordPress内外链自动添加GO跳转

经常看到一些博客点击外链跳转到其他网站上的时候都会有一个跳转页面,很是漂亮。据说是有利于SEO,保护站点权重,不过个人只是觉得好看、高逼格便加上了 。网上相关的源代码很多,只是代码使用的方法不太详细,对于很多新手小白可能并不友好,希望能够帮助新人快速地使用上这个跳转功能。

新建跳转页面

首先,将一下代码(来自孟坤博客复制并保存为一个 index.php 文件丢到网站根目录的 go 文件夹下

<?php  
/** 
 * 带有来路验证和跳转提示功能的跳转页面 
 * @auth 孟坤博客 
 * @authUrl http://mkblog.cn 
 * @data 2017/3/13 
 * @url https://mkblog.cn/701 
 */  
  
// 请将这里的网址改为自己的(顶级)域名地址  
$myDomain = 'mkblog.cn';  
  
// 这里用正则提取 $_SERVER["QUERY_STRING"] 而不是直接 get url  
// 是因为如果链接中自身带有 GET 参数则会导致获取不完整  
preg_match('/url=(.*)/i', $_SERVER["QUERY_STRING"], $jumpUrl);   
  
// 如果没获取到跳转链接,直接跳回首页  
if(!isset($jumpUrl[1])) {  
    header("location:/");  
    exit();  
}  
  
$jumpUrl = $jumpUrl[1];  
  
// 判断是否包含 http:// 头,如果没有则加上  
preg_match('/(http|https):\/\//', $jumpUrl, $matches);      
  
$url = $matches? $jumpUrl: 'http://'. $jumpUrl;  
  
  
// 判断网址是否完整  
preg_match('/[\w-]*\.[\w-]*/i', $url, $matche);      
  
// 是否需要给出跳转提示  
$echoTips = false;  
  
if($matche){  
    // 如果是本站的链接,不展示动画直接跳转  
    if(isMyDomain($url, $myDomain)) {  
        header("location:{$url}");  
        exit();    // 后续操作不再执行  
    }  
      
    $title = '页面加载中,请稍候...';  
    $fromUrl = isset($_SERVER["HTTP_REFERER"])? $_SERVER["HTTP_REFERER"]: ''; // 获取来源url  
      
    // 如果来源和跳转后的地址都不是本站,那么就要给出提示  
    if(!isMyDomain($fromUrl, $myDomain)) {  
        $echoTips = true;  
    }  
} else {    // 网址参数不完整  
    $url = '/';  
    $title = '参数错误,正在返回首页...';  
}  
  
  
/** 
 * 判断是不是自己的域名 
 * @param $domain 要进行判断的域名 
 * @param $my 自己的域名 
 * @return 对比结果 
 */  
function isMyDomain($domain, $my) {  
    preg_match('/([^\?]*)/i', $domain, $match);  
    if(isset($match[1])) $domain = $match[1];  
    preg_match('/([\w-]*\.[\w-]*)\/.*/i', $domain.'/', $match);  
    if(isset($match[1]) && $match[1] == $my) return true;  
    return false;  
}  
  
?>  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<meta http-equiv="X-UA-Compatible" content="IE=edge">  
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">  
<?php  
if($echoTips) {  
    echo '<title>跳转提示</title>';  
} else {  
    echo '<meta http-equiv="refresh" content="0;url='.$url.'">';  
    echo '<title>'.$title.'</title>';  
}  
?>  
<style>  
body{background:#fff;font-family:Microsoft Yahei;-webkit-animation:fadeIn 1s linear;animation:fadeIn 1s linear}  
@-webkit-keyframes fadeIn{from{opacity:0}  
to{opacity:1}  
}@keyframes fadeIn{from{opacity:0}  
to{opacity:1}  
}#circle{background-color:rgba(0,0,0,0);border:5px solid rgba(0,183,229,0.9);opacity:.9;border-right:5px solid rgba(0,0,0,0);border-left:5px solid rgba(0,0,0,0);border-radius:50px;box-shadow:0 0 35px #2187e7;width:50px;height:50px;margin:0 auto;position:fixed;left:30px;bottom:30px;-moz-animation:spinPulse 1s infinite ease-in-out;-webkit-animation:spinPulse 1s infinite ease-in-out;-o-animation:spinPulse 1s infinite ease-in-out;-ms-animation:spinPulse 1s infinite ease-in-out}  
#circle1{background-color:rgba(0,0,0,0);border:5px solid rgba(0,183,229,0.9);opacity:.9;border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-radius:50px;box-shadow:0 0 15px #2187e7;width:30px;height:30px;margin:0 auto;position:fixed;left:40px;bottom:40px;-moz-animation:spinoffPulse 1s infinite linear;-webkit-animation:spinoffPulse 1s infinite linear;-o-animation:spinoffPulse 1s infinite linear;-ms-animation:spinoffPulse 1s infinite linear}  
@-webkit-keyframes spinPulse{0%{-webkit-transform:rotate(160deg);opacity:0;box-shadow:0 0 1px #505050}  
50%{-webkit-transform:rotate(145deg);opacity:1}  
100%{-webkit-transform:rotate(-320deg);opacity:0}  
}@-webkit-keyframes spinoffPulse{0%{-webkit-transform:rotate(0deg)}  
100%{-webkit-transform:rotate(360deg)}  
}#loading-text{position:fixed;left:110px;bottom:35px;color:#736D6D}  
@media screen and (max-width:600px){#circle,#circle1{left:0;right:0;top:0;bottom:0}  
#circle{margin:120px auto}  
#circle1{margin:130px auto}  
#loading-text{display:block;text-align:center;margin-top:220px;position:static;margin-left:10px}  
}  
.warning{max-width: 500px;margin: 20px auto;}  
.wtitle {font-size: 22px;color: #d68300;}  
.wurl {overflow: hidden;text-overflow: ellipsis;white-space: nowrap;color: #827777;}  
.btn {display: inline-block;line-height: 20px;cursor: pointer;border: 1px solid #A9A6A6;padding: 6px 10px;font-size: 14px;text-decoration: none;}  
.btn-green {color: #fff;background-color: #238aca;border: 1px solid #238aca;}  
.btn:hover {background-color: #A9A6A6;border: 1px solid #A9A6A6;color: #fff;}  
</style>  
</head>  
<body>  
    <?php if($echoTips) { ?>  
    <div class="warning">  
        <p class="wtitle">您将要访问:</p>  
        <p class="wurl" title="<?php echo $url;?>"><?php echo $url;?></p>  
        <p>该网站不属于孟坤博客,我们无法确认该网页是否安全,它可能包含未知的安全隐患。</p>  
        <a class="btn btn-green" href="<?php echo $url;?>" rel="nofollow">继续访问</a>  
        <span class="btn" onclick="closePage()">关闭网页</span>  
    </div>  
    <script>  
    function closePage() {  
        // 通用窗口关闭  
        window.opener=null;  
        window.open('','_self');  
        window.close();  
        // 微信浏览器关闭  
        WeixinJSBridge.call('closeWindow');  
    }  
    </script>  
    <?php } else { ?>  
    <div id="circle"></div>  
    <div id="circle1"></div>  
    <p id="loading-text">页面加载中,请稍候...</p>  
    <?php } ?>  
</body>  
</html>

以百度为例,如果你 点击 https://www.liues.cn/go/?url=www.baidu.com 访问,直接就跳转了,如果你手动复制这个跳转网址再粘贴到浏览器访问,则会弹出提示。

如果是本站的站内链接,如 https://www.liues.cn/go/?url=www.liues.cn 无论以何种方式打开都是直接跳转。

这里需要说明的是你也可以直接保存为 go.php 丢在网站根目录下,只不过后面修改链接的时候将 go 替换成 go.php 即可。

跳转页面使用

将上述 index.php 文件丢到网站根目录下的 go 文件夹后,我们既可以通过 https://www.liues.cn/go/?url=https://www.baidu.com 实现 go 页面跳转了,但是这样每次添加外链都手动添加的话太麻烦,使用下面的代码既可以实现外链自动添加 http://yourdomain.com/go/?url=

文章内外链添加go跳转

将以下代码丢入你的主题的functions.php

//文章内外链添加go跳转
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;
}
add_filter('the_content','the_content_nofollow',999);

如果你直接将 Go 页面代码保存成 go.php 的话记得改一下上面链接哦~

评论者链接添加go跳转

同样将以下代码丢入你的主题的functions.php

//评论者链接添加go跳转
function add_redirect_comment_link($text = ''){
    $text=str_replace('href="', 'href="'.get_option('home').'/go/?url=', $text);
    return $text;
}
add_filter('get_comment_author_link', 'add_redirect_comment_link', 5);
add_filter('comment_text', 'add_redirect_comment_link', 99);

如果你直接将 Go 页面代码保存成 go.php 的话记得这里也要改一下链接哦~

一般情况下我们将站点的这两处链接替换掉就可以了,当然如果你有其他需要只需要想办法将原有外链替换为带有 /go/?url= 的就可以了。

原文链接:https://www.liues.cn/lx-396.html

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏地方网络工作室的专栏

Shell 命令行实现将一个站点页面全部下载到本地并替换其中链接的脚本

Shell 命令行实现将一个站点页面全部下载到本地并替换其中链接的脚本 不知道为什么,我总想用 Shell 脚本来实现把一个站点内容给下载下来。但是下载什么站点...

2025
来自专栏乐沙弥的世界

快速安装及部署DRBD

831
来自专栏向治洪

android 调试工具之facebook stetho介绍

概述 Stetho 是 Facebook 开源的一个 Android 调试工具。是一个 Chrome Developer Tools 的扩展,可用来检测应用的网...

2155
来自专栏Coding迪斯尼

java开发操作系统:一个程序向另一个程序伸出的咸猪手

1544
来自专栏Python研发

LInux50个基本命令

cd:(切换) vim:(创建文件)   vi:编辑文件 bc:(计算器)quit:退出计算器 mkdir:(创建目录)   mkdir -p:递归建立目录 r...

1183
来自专栏linux运维学习

linux学习第四十二篇:限定某个目录禁止解析php, 限制user_agent,PHP相关配置

限定某个目录禁止解析php 虚拟主机配置文件添加的核心配置内容: <Directory /data/wwwroot/111.com/upload> ...

2269
来自专栏京东技术

必须掌握的ADB命令 | 让你的测试事半功倍

ADB的全称是Android Debug Bridge,是一个与模拟器或者连接设备通讯的桥梁。ADB是CS结构包含三个部分:

9464
来自专栏木子昭的博客

5分钟将简书markdown文章批量迁移到django站点

链接地址: https://fangyuanxiaozhan.com (欢迎访问, 哈哈!)

933
来自专栏跟着阿笨一起玩NET

C#.bat文件清理工程目录

991
来自专栏PHP在线

表单提交常见问题

1、让PHP定时运行 编辑如下代码,并保存为test.php: $fp = @fopen(”test.txt”, “a+”); fwrite($fp, dat...

2857

扫码关注云+社区