一个奇淫技巧实现的短网址

2025 年 1 月 17 日
 Wxh16144

写在前面哈

这个方案只是出于学习和分享的目的,肯定是不建议在生产环境中使用的。并且不是最优的方案,只是一个简单的实现。

实现

  1. 使用 GitHub Pages 自定义子域名,然后通过 404 页面实现跳转。
  2. 本地使用 git commit --allow-empty -m 将每一个真实网址作为一个 commit message 提交到 GitHub 仓库。
  3. 由于每一个提交都会生成一个唯一的 SHA-1 值,然后通过这个 SHA-1 值作为短网址的路径。
  4. 最后在 404 页面中通过 GitHub commits api 用 SHA-1 值获取到 commit message ,然后跳转到真实网址。

比如: https://link.wxhboy.cn/22bb (22bb 是一个 SHA-1 值)

以上就是整个实现的思路。源码在这里, Wxh16144/links/blob/gh-pages/404.html

Firebase Dynamic Links 迁移

Firebase Dynamic Links 已被弃用,不应该在新项目中使用。该服务将于 2025 年 8 月 25 日关停。

由于以前使用的 Firebase Dynamic Links 服务,并且最近登录后发现弃用提示。发现提供了数据导出的功能,所以就导出了历史数据。

这里可以用脚本将导出的数据的真实地址一条条的转换成 commit message ,然后提交到 GitHub 仓库中。

但是之前的路径是不一样,所以我们可以痛过 tag 来实现一一对应。就像这样:

如上操作后,我们就可以通过 tag 或分支名来实现语义化的路径

总结

用 SHA-1 值作为路径,虽然不是最短的短网址,但是可以保证唯一性。

加上之前网络上出现过一篇名为 《 Anyone can Access Deleted and Private Repository Data on GitHub 》 的文章,说的是即便删除了有关分支和 tag 依然可以通过 api 获取到提交的信息。微软回应这是设计如此。

所以我们在仓库只要有 push 过的提交,都可以通过 SHA-1 值来获取到提交信息。也就是说,这个基于 SHA-1 值的短网址服务是可以永久保留的。

缺点

说完我们的骚操作,也要说说缺点。

  1. 由于每一个真实网址都是一个提交,所以会导致仓库的提交记录非常多,不利于查看。 (可以通过 tag 或分支名来实现语义化的路径)
  2. 因为 GitHub 仓库是公开的,所以短网址也是公开的,不适合敏感信息。
  3. 由于是通过 404 页面实现跳转,所以会有一定的延迟。
  4. 404 页使用了 GitHub api ,所以会存在一定的请求次数限制。

以上,这是一个玩具~

试试看文中提到的短网址

13266 次点击
所在节点    程序员
66 条回复
timothyye
2025 年 1 月 18 日
奇淫技巧是什么意思?特别淫荡的技巧?
MEIerer
2025 年 1 月 18 日
牛 b
x86
2025 年 1 月 18 日
天才,想给你做个免费的开颅手术看看里面都放了啥
HENQIGUAI
2025 年 1 月 18 日
确实天才
querysecret
2025 年 1 月 18 日
SHA1 不是摘要算法吗,摘要算法不是都有可能碰撞吗,是唯一?
wangxiaoer
2025 年 1 月 18 日
@abinnz #5 这个 token 好像不是必须的?
wangxiaoer
2025 年 1 月 18 日
@jadehare #22 细说什么情况?
jadehare
2025 年 1 月 18 日
@FaiChou
@wangxiaoer #47

<amp-youtube data-videoid="4LwHH3r2qNY" layout="responsive" width="480" height="270"></amp-youtube>
uds9u32br
2025 年 1 月 18 日
有点意思
bigbigeggs
2025 年 1 月 18 日
牛逼,sha 是 2dfcb2bec39d48cfad67b574014f71bc869998ce 这么长,怎么确定用哪几位就可以确定唯一一个提交了?
GeruzoniAnsasu
2025 年 1 月 18 日
@bigbigeggs OP 的源码直接用 github 的 API 查询的,git 的实现把 hash 作为 refs 路径的一部分,用 trie 管理
Vfei2017
2025 年 1 月 18 日
请教一下,这个的应用场景是什么
qqjt
2025 年 1 月 18 日
不是哥们
lijianan
2025 年 1 月 19 日
看不懂,但是小红哥 nb
htccav
2025 年 1 月 19 日
完全看不懂,但是很牛逼
intoext
2025 年 1 月 19 日
纠正,成语是奇技淫巧,不是奇淫技巧
UB
2025 年 1 月 19 日
挺有创意的,大哥牛逼
vcbal
2025 年 1 月 20 日
666,可以可以,感谢楼主分享
phatzhong24
2025 年 1 月 20 日
这是什么应用场景?
ixx
2025 年 1 月 20 日
哈哈哈 原来不只我自己用 404 页面做跳转
我之前做的导航 就是利用 404 页面实现 “域名/任意 github 用户名” 转成“域名/?任意 github 用户名”
这种传参的方式 就可以 实现导航数据托管在用户自己的仓库里 根据名字 拼接取导航数据了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/1105845

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX