给博客加入链接安全跳转页(添加一个和CSDN一样的链接跳转页)
本文首发于青云工作室
原文链接为 https://qystudio.ltd/posts/25250.html
前言
或是出于优化 SEO,或是出于加强网站体验,很多博客都给文章中的外部链接加上了个二次跳转,本博客也不例外。
在逛别人的博客的时候,发现了有一种叫go.php
的东西,可以经过自己站点的网页再跳转出去,方便SEO优化。但是像Hexo这类静态博客,想要从源HTML修改链接难度有点大,这里我们采用JavaScript动态修改
部署
点我fork此仓库,然后在vercel中部署
或使用他部署
修改
打开js/index.js
修改个人信息
$(document).ready(()=>{
console.log("Running...")
if(window.location.hash===""){
document.getElementsByClassName("loading-text")[0].innerHTML = "参数错误,将跳转回青云工作室<dot>...</dot>"
setTimeout(()=>{
window.location.href = "https://qystudio.ltd/"/* 这里 */
},5000)
return;
}
let reg = new RegExp(/#(.*)/g);
let base64 = reg.exec(window.location.hash)
let link = window.atob(base64[1])
let referrer = document.referrer.split('/')[2];
referrer = referrer===undefined?"":referrer.split('.')
if(referrer[referrer.length-2]+'.'+referrer[referrer.length-1]!="pai233.top" || document.referrer===""){
swal.fire({
title: "确定访问?",
text: "该网址不属于青云工作室,你确定要打开"+link+"吗?",/* 这里 */
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: "确定",
cancelButtonText: "取消",
}).then(function(isConfirm){
console.log(isConfirm)
if (isConfirm) {
console.log('setTimeout')
setTimeout(function(){
window.location.href = link
},3000)
}
else {
window.opener=null;
window.open('','_self');
window.close();
/* 微信浏览器关闭 */
WeixinJSBridge.call('closeWindow');
}
})
}else{
setTimeout(function(){
window.location.href = link
},3000)
}
})
打开js/checker.js
$(document).ready(function(){
checkLink();
});
// 若博客启用了Pjax请去掉注释。
// $(document).on('pjax:complete', function () {
// checkLink();
// });
async function checkLink(){
let link = document.getElementsByTagName('a');
for(var i=0;i<link.length;i++){
//如果你的博客添加了Gitter聊天窗,请去掉下方注释
if(link[i].href==="" /*|| link[i].className==="gitter-open-chat-button"*/)continue;
if(!await checkLocalSite(link[i].href)){
link[i].href = "[你的Go Jumper的部署地址]#"+window.btoa(link[i].href)
//console.log("edit.")
}
}
}
async function checkLocalSite(url){
try{
//console.log("check:",url)
let reg = new RegExp(/\/\/(.*)\//g)
let domain = reg.exec(url)[1].split('/')[0].split('.')
//console.log(domain,domain[domain.length-2]+'.'+domain[domain.length-1])
domain = {
//二级域名请去除下一行的注释
check: (/*domain[domain.length-3]+'.'+*/domain[domain.length-2]+'.'+domain[domain.length-1]).split('/')[0],
original: domain
}
//console.log(domain)/* 这里 */
if(domain.check==="qystudio.ltd" || domain.original[0].split('/')[0]==="localhost:4000")return true;//将domain.check修改为根或二级域名,domain.original[0].split('/')[0]修改为本地测试页面
return false;
}catch(err){
return true;
}
}
引入
最后在博客的_config.yml
中引入
例如vlts的
import:
script:
- <script src="https://cdn.jsdelivr.net/gh/qystudio0/go-jumper/js/checker.js"></script>
如果你的主题不支持引入那么可以在head里添加
<script src="https://cdn.jsdelivr.net/gh/qystudio0/go-jumper/js/checker.js"></script>
结语
这样,当博客加载完毕的时候,博客的全部外链就会被加上二级跳转,但是源HTML里的外链不变。可以优化 SEO和加强网站体验
给博客加入链接安全跳转页(添加一个和CSDN一样的链接跳转页)的更多相关文章
- 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客?
前言 OK,我也来造轮子了 博客系统从一开始用WordPress,再到后来用hexo.hugo之类的静态博客生成放github托管,一直在折腾 折腾是为了更好解决问题,最终还是打算自己花时间搞一个好了 ...
- 博客自定义1-皮肤模板 基于SimpleMemory 添加到顶部小按钮
周五公司事不是很紧,打算好好弄下自己的博客,这是自己学习和记录分享地方, 首先请记得申请js权限,默认不支持的,博主是已经申请通过后的样子 接着先选择cnblogs一个现有的模板,我这个就是在他的模板 ...
- VuePress 博客之 SEO 优化(五)添加 JSON-LD 数据
前言 在 <一篇带你用 VuePress + Github Pages 搭建博客>中,我们使用 VuePress 搭建了一个博客,最终的效果查看:TypeScript 中文文档. 本篇讲 ...
- 简洁美观的Java博客系统Tale开源了,让每一个有故事的人更好的表达想法
Tale Tale的英文含义为故事,我相信每个坚持写Blog的人都是有故事的:中文你叫它 塌了 也无所谓 . Tale 使用了轻量级mvc框架 Blade 开发,默认主题使用了漂亮的 pinghsu, ...
- 夺命雷公狗---node.js---20之项目的构建在node+express+mongo的博客项目5mongodb在项目中实现添加数据
我们上一步就引入了mongodb了,那么下一步就要开始写添加数据了,不过有个前提是先将表单的数据处理好: 最基本的这部现在已经成功了,因为最基本的这步就是先将表单处的提交方式和提交地址给处理好,这里和 ...
- 搭建自己的技术博客系列(一)使用 hexo 搭建一个精美的静态博客
1.安装 Git 和 nodejs https://hexo.io/zh-cn/docs/
- 文顶顶iOS开发博客链接整理及部分项目源代码下载
文顶顶iOS开发博客链接整理及部分项目源代码下载 网上的iOS开发的教程很多,但是像cnblogs博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程 ...
- 【全网最全的博客美化系列教程】01.添加Github项目链接
全网最全的博客美化系列教程相关文章目录 [全网最全的博客美化系列教程]01.添加Github项目链接 [全网最全的博客美化系列教程]02.添加QQ交谈链接 [全网最全的博客美化系列教程]03.给博客添 ...
- 【全网最全的博客美化系列教程】02.添加QQ交谈链接
全网最全的博客美化系列教程相关文章目录 [全网最全的博客美化系列教程]01.添加Github项目链接 [全网最全的博客美化系列教程]02.添加QQ交谈链接 [全网最全的博客美化系列教程]03.给博客添 ...
随机推荐
- Web开发之Servlet
当一个请求到达服务端,服务器怎么处理? 当一个请求到达服务端时,由服务端的引擎来进行分析.它根据工程名找到工程, 然后拿到URL的资源地址和web.XML文件的所有的进行对比,和哪一个对比上就找到了具 ...
- Ubuntu 桌面版使用总结
最近拿出了大学时买的性(游)能(戏)本(机),其实从直观来看,硬件基础还是不错的,但是跑 WIN10, 清了各种广告,关了各种无效进城之后,用起来仍然还是很不爽.可能是已经用惯 mac 了吧,mac给 ...
- C++与lua交互之C++访问lua
假设lua中: name="gzw" id=17010805 sex=man tab={ num=100, str="hello" } foo_one=func ...
- 关于python 爬虫遇到的反盗链
首先声明:目标网址是从别人案例里得到的,内容你懂的... 本来闲来无事,学习下爬虫的知识,遇到恶心的反盗链,好在目标网址防盗链简单,代码里注明了如何去查看目标网址的防盗检查: 防盗链原理 http标准 ...
- 访问静态资源有问题(配置url-pattern 用"/")(两种静态资源处理)
发起的请求是由哪些服务器程序处理的 http://localhost:8080/ch05_url_pattern/index.jsp: tomcat(jsp会转为servlet) http://loc ...
- Servlet程序常见错误
常见错误1:url-pattern中配置的路径没有以斜杠打头. 常见错误2:servlet-name配置的值不存在 常见错误3:servlet-class 标签的全类名配置错误
- 大厂面试:一个四年多经验程序员的BAT面经(字节、阿里、腾讯)
前言 上次写了篇欢聚时代的面经,公众号后台有些读者反馈说看的意犹未尽,希望我尽快更新其他大厂的面经,这里先说声抱歉,不是我太懒,而是项目组刚好有个活动要赶在春节前上线,所以这几天经常加班,只能工作之余 ...
- Android开发----RecyclerView视图的学习
RecyclerView RecyclerView是什么? RecyclerView是如今Android开发中最常用的控件,其相较于ListView和GridView的功能更为强大,优化了两者的各种不 ...
- 删除修改docker网络环境
安装工具包 yum install bridge-utils -y 设置docker0 ip网段 ip link set docker0 down brctl delbr docker0 brctl ...
- Android开发-页面绘制
今天主要绘制了记账页面 记账页面用到的布局是TableLayout加Viewpager联动的方式,通过设置一个标题头可以实现页面的左右滑动,viewpager中添加两个fragment. 需要制作两个 ...