由于 Goo.gl 的命运未卜,而且许多URL缩短/重定向服务要么价格昂贵,要么充斥着垃圾信息,所以我开始琢磨能否找到一种免费/便宜的方法来实现同样的效果。于是我注册了一个短域名 (CLXI.org),并尝试使用一个包含页面的 GitHub 代码库来重定向 URL。结果发现,这方法相当简单。
我把所有的技巧都整理到一个存储库中,你可以 fork 它并开始使用: https://github.com/codepo8/gh-pages-urlshortener
您可以在这里看到实际体验 – 其中之一: https ://codepo8.github.io/gh-pages-urlshortener/go/chris10s 或https://clxi.org/go/wad
在 GitHub 页面上重定向
为了从 GitHub 页面重定向任何页面,你需要加载正确的 gem 并进行设置。你可以在 `_config.yml` 文件中进行设置:
宝石:-jekyll-redirect-from
白名单: – jekyll-redirect-from
插件: – jekyll-redirect-from
如果你现在向页面添加一个名为“offwego.md”的 markdown 文件,你可以给它这个 Frontmatter 来重定向它:
—-
重定向到:–https://christianheilmann.com—-
您可以在这里尝试: https://clxi.org/offwego 。
不过,这只是一个简单的服务器重定向——就像你在自己的服务器上做的一样。用户不会收到通知,也无法取消重定向。如果你希望取消重定向,那就没问题了。我想给用户更多选择。
构建具有预览功能的重定向
我没有在根文件夹中创建大量的 Markdown 文件,而是使用 /go/ 文件夹来存储它们。在 GitHub Pages 中,最好的方法是创建一个集合。我创建了一个名为“_go”的文件夹,并将其添加到“_config.yml”文件中:
收藏:
去:
输出:true
确保将“输出”设置为“true”。
现在我可以在那里添加很多 Markdown 文件了。为了让它们看起来更独特,并更好地控制重定向,我创建了一个模板文件。为此,我创建了一个 `_layouts` 文件夹,并在其中添加了一个 `redirection.html` 文件。 最终的模板有很多功能我们这里就不赘述了,但主要的技巧是让HTTP重定向在时间上( 位)和要跳转到的URL ()都变成一个变量:
这样,我现在可以在“_go”文件夹中添加 markdown 文件,并在 frontmatter 中定义要重定向到的时间和地点:
—-
转到:https://christianheilmann.com
布局:重定向
延迟:10——
我选择“重定向”布局,“转到” URL作为我的 URL,并延迟十秒。
元重定向的功能就到此为止了。我还想添加一个预览进度条和一个取消重定向的功能。元重定向最烦人的地方之一就是无法取消。HTML规则至高无上,即使用 JavaScript 移除它也无济于事。
增加取消重定向的机会和其他一些有趣的功能
为了获得更精细的控制,我使用 JavaScript 进行重定向。这可能会造成问题,但能为用户提供更多选择。
该脚本没有什么神奇之处,我将数据从前言中导入:
让倒计时 = document.getElementById(“倒计时”);
让 bar = document.getElementById(“progressBar”);
让 full = bar.max;
让延迟 = ;
让间隔 = setInterval(() => {
延迟-;
倒计时.textContent = 延迟;
bar.value = 完整 - 延迟;
如果(延迟<= 0){
window.location.href = “”;
清除间隔(间隔);
}
}, 1000);
document.querySelector(“按钮”).addEventListener(“点击”, () => {
清除间隔(间隔);
document.querySelector(“部分”)。innerHTML =`
已取消重定向
`;
});
就这样,现在你可以看到链接的目的地,并且可以根据需要取消。无论在深色模式还是亮色模式下都可以。以下是进度条的实际效果:
取消重定向(这次显示灯光模式):
欢迎随意在 GitHub 上分叉、添加评论和改进!
原文: https://christianheilmann.com/2025/08/11/using-github-pages-as-a-url-shortener-redirection-service/