惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Attack and Defense Labs
Attack and Defense Labs
T
Tor Project blog
Scott Helme
Scott Helme
Schneier on Security
Schneier on Security
Security Archives - TechRepublic
Security Archives - TechRepublic
S
Security @ Cisco Blogs
GbyAI
GbyAI
Help Net Security
Help Net Security
T
Troy Hunt's Blog
Recent Announcements
Recent Announcements
Engineering at Meta
Engineering at Meta
L
LINUX DO - 最新话题
TaoSecurity Blog
TaoSecurity Blog
AWS News Blog
AWS News Blog
Y
Y Combinator Blog
SecWiki News
SecWiki News
Microsoft Azure Blog
Microsoft Azure Blog
Spread Privacy
Spread Privacy
A
About on SuperTechFans
Stack Overflow Blog
Stack Overflow Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
Google DeepMind News
Google DeepMind News
NISL@THU
NISL@THU
T
Threat Research - Cisco Blogs
S
Securelist
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
雷峰网
雷峰网
H
Help Net Security
AI
AI
The Hacker News
The Hacker News
B
Blog
罗磊的独立博客
L
Lohrmann on Cybersecurity
爱范儿
爱范儿
C
Cisco Blogs
有赞技术团队
有赞技术团队
Project Zero
Project Zero
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
Secure Thoughts
A
Arctic Wolf
Blog — PlanetScale
Blog — PlanetScale
腾讯CDC
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Latest news
Latest news
Cloudbric
Cloudbric
D
Docker
博客园 - 叶小钗
月光博客
月光博客

ypingcn

为什么我还在用 Firefox - ypingcn [streamscharts]2025年全年全球直播平台报告 [streamscharts]2025年全年全球直播平台报告 [streamscharts]2025年Q4第四季度全球直播平台报告 [streamscharts]2025年Q4第四季度全球直播平台报告 奇点前尘:回望人工智能2025 奇点前尘:回望人工智能2025 [streamscharts]2025年Q3第三季度全球直播平台报告 [streamscharts]2025年Q3第三季度全球直播平台报告 在工作中使用 AI 辅助 在工作中使用 AI 辅助 连麦、PK和语音房的实现设计思路 连麦、PK和语音房的实现设计思路 数据密集型应用系统设计笔记 数据密集型应用系统设计笔记 Podcast 是新一代的 Blog?| 播客收听体验分享 Podcast 是新一代的 Blog?| 播客收听体验分享 2022 年终总结 2022 年终总结 追「个人养老金」热点?不如多了解观望看看 追「个人养老金」热点?不如多了解观望看看 何为同路人? | 人生七年(一) 简化开发逻辑的用户属性服务设计 用户权限服务的设计 博客更新记录总结 | 个人博客历史(一) 使用本地缓存优化微服务 blade build 在微服务开发中的应用 如何高效地搜索 投顾服务初观察 The South 18 年春招记录 2017 年终总结 Firefox Quantum 引发的思考 续写 《像我这样的一个女子》 用 WPS 生成文档目录 用 nodePPT 完成网页演示 Dr.com 认证的校园网里使用 WiFi 初试 ssh 命令 MATLAB 选修课上的一些有趣的代码 用 Jekyll 在 Github 上搭建一个简易博客 Hello! Github Page 感谢
静态页面也能实现短链接 | 个人博客历史(二)
ypingcn · 2022-11-13 · via ypingcn
[AD] -- 下方为内容广告,点击支持作者,想过滤广告? -- [AD]

本站点是使用 Jekyll 搭建起来的,所有的页面都是静态页面,在部署的时候页面的就已经确认了,并没有实现服务端的逻辑。但有些链接地址太长,直接分享出去会占用太多字数也不好更新。

例如专题里的《最新版 Firefox 火狐浏览器下载》 《最新版 Librewolf 浏览器下载》 《最新版 Floorp 浏览器下载》 这三个页面,我都增加了「最新版本快速下载」的按钮,原本是直接加上原始下载链接的。但是随着版本更新,每次更新最新版本的地址都需要在三个地方更新三个地址的信息,不仅麻烦,而且会多次触发页面的构建增加不必要的提交历史,于是萌生了实现短链接的逻辑。

实现

实现这个功能主要想好两个问题

  1. “短地址”到“实际地址”的对应关系如何管理
  2. 最终地址如何跳转

如何管理

数据管理的话,主要考虑到部署在 Github Page/Gitee Page/COding Page 这类第三方服务上的 Jekyll 都不能调用数据库,而且这个短链功能主要是给博客使用,不会大规模对外,使用数据库来管理就太“重”了。所以可以直接把数据存在一个routes.json文件里,在地址里传进短地址,实际的跳转地址从这个配置文件里获取。

一个例子——

{
    "floorp-windows-lastest": "https://github.com/Floorp-Projects/Floorp/releases/download/v10.7.0/floorp-win64.installer.exe"
}

如何跳转

静态页面跳转的话就没法返回不同的HTTP 301(永久重定向)/302(临时重定向)返回码了。但是在功能体验上来说可以尽可能地让用户的等待时间缩短,且逻辑只能在前端实现。

上网搜索了一下,发现一篇博客给了我启发。可以设置 window.location.href 属性来实现跳转,如果有延时的需要则设置定时器后延迟更新属性。

因为静态页面里获取routes.json时可能会拿到一个带缓存的非最新页面,所以可以在获取的时候加一个?t=[时间戳]的小尾巴,这也是很多网站的常规操作了。

非前端开发者,东拼西凑的代码,贴一下自己的实现。主要逻辑是从地址里的r参数里获取短地址。如 https://example.com/?r=blog 这个地址,blog 就是我们想要的短地址,不存在的短地址则跳转到error.html 上。

function goUrl(config, timeoutMs) {
    fetch(config + `?t=${Date.now()}`)
        .then(response => response.json())
        .then(routes => {
            var queries = parseQueryString(location.search.substring(1))
            var key = queries['r']
            var url = routes[key];
            if (!url)
                url = '/error.html';
            console.log(`${key} redirecting to ${url}`);
            setTimeout(function () {
                window.location.href = url
            }, timeoutMs)
        })
        .catch(error => {
            console.log(error);
        });
}

最终效果

来看看最终效果吧,逻辑不复杂,虽然并不完美但也是实现了需要的功能。

参考网页

  1. 《不必复杂,静态博客也可以做短链》
[AD] -- 下方为内容广告,点击支持作者,想过滤广告? -- [AD]