当前位置: 首页 > news >正文

如何给 GitHub Pages 配置多个域名?

因为以前对域名进行了一些调整,所以实际上我的博客在历年来经历了两个域名 blog.walterlv.com(新)和 walterlv.com(旧)。然而 GitHub Pages 只支持一个自定义域名,所以为了兼容旧域名的访问,如何可以让多个域名对应同一个 GitHub Pages 呢?


@TOC

背景

  • <blog.walterlv.com> (新)
  • walterlv.com (旧)

以前不会碰到这样的问题,是因为我并没有使用 GitHub Pages 服务来构建博客,然而现在是了。

GitHub Pages 识别访问的是哪个站点的方式是识别 xxx.github.io 的 xxx 部分,比如默认我只能通过 <walterlv.github.io> 来访问到我通过 GitHub Pages 搭建的博客。因此如果你使用反向代理服务器将一个其他的域名代理到 xxx.github.io 是会得到 404 的——GitHub Pages 不知道你想访问哪个站点。

GitHub Pages 设置

这时,在 GitHub Pages 设置里面,你就需要设置一个 Custom domain 来帮助 GitHub Pages 部署的时候知道某个域名实际上是你的,需要用来显示此仓库的 GitHub Pages。

比如我在这里设置了 <blog.walterlv.com>,于是当我将反向代理服务器代理到 walterlv.github.io 时,GitHub Pages 便能正确得知这实际上是 walterlv.github.io 这个仓库的,这才能正确显示 GitHub Pages 页面。

此设置会在你的仓库根目录生成 CNAME 文件,里面仅一行文本,即域名 <blog.walterlv.com>。

然而问题来了,我之前的域名实际上是 walterlv.com,这样,当我设置 DNS 时,如果直接将 walterlv.com 设置到 walterlv.github.io 依然会出现 404。

接下来我们说说解决办法。

通过中转仓库

我们需要在 GitHub 上再新建一个仓库,用来中转旧域名中的访问到新的域名。

第一步:新建随意名字的仓库

我们新建一个仓库。新建的时候实际上可以无所谓命名,因为这个仓库里面不会真的有内容,多数时候访问实际上是 404 的。但我们创建它只是为了前面提到的那个 CNAME 文件,告诉 GitHub Pages 我们有两个域名而已。

新建仓库

这里,我创建了一个名为 oldblog 的仓库,正常情况下,访问这个仓库 GitHub Pages 的域名前缀为 walterlv.github.io/oldblog。

第二步:为此仓库添加 GitHub Pages 服务

接着,按照平时去创建 GitHub Pages 服务的方法往这个仓库提交代码。

例如可以在仓库根目录放一个 _config.yml 文件(这是 Jekyll 的配置文件),然后直接提交:

title: walterlv
author: walterlv

当有了一个分支和 Jekyll 的配置文件后,就可以直接使用 GitHub Pages 服务了。在这里,我们将自定义域名填写成旧的域名 walterlv.com。

为新建的仓库配置 GitHub Pages

这样,当我们在域名服务器中将 walterlv.com 设置到 walterlv.github.io 时,GitHub Pages 至少知道应该使用这个仓库里的 GitHub Pages 来显示。

第三步:创建用于跳转的 404 页面

然而我们并不打算在这个仓库里真的放代码/网页,于是在根目录放一个 404.html 文件:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>正在重定向…… - walterlv</title>
</head>
    <script language="javascript">
        var domain = "blog.walterlv.com";
        var current = window.location.href;
        var target = current.substring(current.indexOf('/', current.indexOf(':') + 3));
        window.location.href = "//" + domain + target;
        location.href = "//" + domain + target;
    </script>
    <body>
        正在重定向……
    </body>
</html>

现在,仓库里面是这样的(walterlv/oldblog):

仓库文件

第四步:配置 DNS

最后检查你的 DNS 配置:

  • 旧域名:walterlv.com -> walterlv.github.io
  • 新域名:<blog.walterlv.com> -> walterlv.github.io

到现在,就全部完成。不信你试试,点击链接 https://walterlv.com/post/multiple-domains-for-github-pages 会短暂进入一个“正在重定向……”的页面,然后随即跳转到新域名下相同的页面 https://blog.walterlv.com/post/multiple-domains-for-github-pages。

原理

一个 GitHub Pages 的仓库只能有一个 CNAME 文件,也即我们只能告知 GitHub 我们的一个合理域名。要让 GitHub Pages 支持两个域名,我们不得不建两个仓库,其中第二个仓库的地址为 xxx.walterlv.com/repo-name。在第二个仓库中,我们故意什么都不放,这样会触发 404,我们在 404 页面里面跳转到新的域名即完成了我们的目的。


参考资料

  • 多个域名映射同一个github pages - 守望的个人博客

我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • 通过子类化窗口(SubClass)来为现有的某个窗口添加新的窗口处理程序(或者叫钩子,Hook)
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • git 乱改你的换行符?一句话设置让 git 不再碰你某个文件的换行符
  • Linux Shell 中需要转义的字符
  • Unity3D 入门:Unity Editor 编辑器常用快捷键
  • Unity3D 入门:Unity 项目版本管理建议使用的 .gitignore 忽略文件和 .gitattributes 文件(2020年4月更新)
  • Unity3D 入门:让 C# 脚本公开可在 Unity 编辑器中设置的属性
  • Unity3D 入门:如何管理 Unity 项目中的 NuGet 包?使用第三方 NuGet 包管理器——NuGetForUnity
  • Unity3D 入门:如何在脚本中找到游戏对象的父子级 祖孙级对象和它们的组件
  • Unity3D 入门:如何制作天空效果?天空盒的使用
  • Unity3D 入门:使用 Visual Studio 开发 Unity C# 脚本,说说根目录的那些 sln 和 csproj 文件
  • Unity3D 入门:最简单的控制视角,以及控制角色前进、转向的脚本
  • 比较 Windows 上四种不同的文件(夹)链接方式(NTFS 的硬链接、目录联接、符号链接,和大家熟知的快捷方式)
  • (三)从jvm层面了解线程的启动和停止
  • CSS实用技巧干货
  • Django 博客开发教程 8 - 博客文章详情页
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • es6
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Java比较器对数组,集合排序
  • JDK9: 集成 Jshell 和 Maven 项目.
  • node和express搭建代理服务器(源码)
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 技术:超级实用的电脑小技巧
  • 力扣(LeetCode)56
  • 七牛云假注销小指南
  • 实现简单的正则表达式引擎
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 详解移动APP与web APP的区别
  • 用Canvas画一棵二叉树
  • AI算硅基生命吗,为什么?
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (1)SpringCloud 整合Python
  • (175)FPGA门控时钟技术
  • (2)Java 简介
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (4)STL算法之比较
  • (5)STL算法之复制
  • (70min)字节暑假实习二面(已挂)
  • (poj1.2.1)1970(筛选法模拟)
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (笔试题)分解质因式
  • (二)linux使用docker容器运行mysql
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (一)基于IDEA的JAVA基础12
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复