前言
早在数月前就有了严格规范soarli博客外链管理的想法,但受限于当时的时间、技术等条件一直没有开始行动。
此外电脑120网站正在使用Typecho默认链接管理机制。即:点击文章内的链接直接在当前页面打开,严重影响用户访问体验(用户点击外部链接出去后很难找到正在阅读的文章),近期一并加以解决。
当然可能还有大大小小的bug,欢迎大家帮忙寻找并向我反馈~
效果
soarli博客
若要严格规范外部链接的管理,面对大量的超链接,逐个手动添加跳转条件显然是不可能的,因此跳转条件需要使用Web程序对指定区域的超链接自动添加。
当然这个操作通过前后端都可以实现,但相比于jQuery动态处理DOM的解决方案,我还是更加倾向于借助后端语言完成此操作(从SEO和安全性角度考虑)。
实现效果:
- 文章内部所有超链接的
href属性都被自动加上了https://blog.soarli.top/jump/?url=前缀 - 点击链接后会触发后端程序对于目标站点所属域名的检测机制
- 若目标站点的域名为
*.soarli.top,则直接返回302响应头给予跳转 - 若目标站点的域名属于本站友情链接,则直接返回302响应头到友情链接跳出放行页面(如下图)

- 若目标站点的域名不属于本站且不在友情链接列表,则直接返回302响应头到外部链接跳出确认页面(如下图)

- 若
GET请求中的"url"参数并非合法的url格式,则直接返回302响应头到https://blog.soarli.top/(soarli博客首页) - 若未设置
HTTP Referer请求头或Referer信息不属于soarli博客且GET请求中的"url"参数不属于*.soarli.top,则返回外链拦截页面(如下图)并通过HTTP响应头告知浏览器不要缓存此响应信息

另一方面,针对友情链接跳出放行页面和外部链接跳出确认页面:
- 若未设置
HTTP Referer请求头或Referer信息不属于soarli博客,则直接返回302响应头到https://blog.soarli.top/(soarli博客首页)并通过HTTP响应头告知浏览器不要缓存此响应信息 - 页面会自动读取即将跳转的
url并通过dns-prefetch和prefetch等方法调用浏览器的预加载模块进行页面的预加载以加快打开速度
电脑120网站
针对文章发布页面的a标签自动添加 target="_blank" rel="nofollow",其中前者指定在新标签页面打开网页,后者则负责告诉搜索引擎拒绝为该链接分出本站的权重。

实操
soarli博客
文章页面:
handsome/libs/Content.php

$content = preg_replace("/<a href=\"([^\"]*)\">/i", "<a href=\"https://blog.soarli.top/jump/?url=\\1\" target=\"_blank\">", $content);评论区:
handsome/component/comments.php

$author = '<a href="' .'https://blog.soarli.top/jump/?url='. $comments->url . '"target="_blank"' . ' rel="external nofollow">' . $comments->author . '</a>';电脑120网站
functions.php的添加 parseContent() 函数:
function parseContent($obj){
$options = Typecho_Widget::widget('Widget_Options');
if(!empty($options->src_add) && !empty($options->cdn_add)){
$obj->content = str_ireplace($options->src_add,$options->cdn_add,$obj->content);
}
$obj->content = preg_replace("/<a href=\"([^\"]*)\">/i", "<a href=\"\\1\" target=\"_blank\" rel=\"nofollow\">", $obj->content);
echo trim($obj->content);
}
修改主题 post.php 文件,将默认的内容输出
<?php $this->content(); ?> 改成 :
<?php parseContent($this); ?>
参考资料:
http://c.biancheng.net/view/6171.html
https://www.qian.blue/archives/typecho-URLOpenOnNewLabel.html
https://www.cnblogs.com/zdz8207/p/3773938.html
版权属于:soarli
本文链接:https://blog.soarli.top/archives/590.html
转载时须注明出处及本声明。