前言
早在数月前就有了严格规范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
转载时须注明出处及本声明。