You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将所有子域名指向主域名且不修改URL?(GitHub Pages+Namecheap)

解决GitHub Pages通配符子域名指向主站的404问题

首先,你遇到的404问题核心是GitHub Pages的CNAME绑定规则和你当前的DNS设置不匹配。直接把*.domain.com的CNAME指向domain.com是行不通的,因为GitHub无法通过这个关联到你的Pages仓库。下面是具体的解决步骤:

1. 修正Namecheap的DNS设置

在Namecheap的域名管理面板中,修改你的通配符CNAME记录:

  • 主机名填*
  • 记录类型选CNAME
  • 目标值填你的GitHub Pages默认域名(格式为你的GitHub用户名.github.io,比如octocat.github.io

不要指向你的自定义域名domain.com,GitHub需要通过默认域名来定位到对应的仓库。

2. 配置GitHub Pages仓库

进入你的GitHub仓库,打开Settings -> Pages

  • 在「Custom domain」输入框中填写你的主域名domain.com,然后点击「Save」
  • 勾选「Enforce HTTPS」(如果域名已经通过GitHub验证,这个选项会可用,建议开启)
  • 确保仓库根目录存在CNAME文件,内容就是domain.com(如果刚才设置自定义域名时自动生成了就不用手动创建,没有的话新建一个)

这一步是让GitHub把你的仓库和domain.com及其所有子域名绑定起来,这样通配符解析的请求才会被正确路由到你的Pages站点。

3. 实现子域名适配(地址栏不变)

现在所有子域名都会加载你的主站HTML了,接下来用JS检测子域名并做适配:
在你的主站HTML中添加这段代码(放在</body>前比较合适):

// 获取当前域名的子部分
const hostname = window.location.hostname;
const parts = hostname.split('.');
// 排除主域名和www的情况(如果你的主域名是www.domain.com,这里调整判断逻辑)
if (parts.length >= 3 && parts[0] !== 'www') {
  const subdomain = parts[0];
  // 这里写你的适配逻辑,比如修改页面内容、加载对应资源等
  console.log(`当前访问的子域名:${subdomain}`);
  // 示例:修改页面标题
  document.title = `${subdomain} - ${document.title}`;
}

这样用户访问sub.domain.com时,地址栏保持不变,加载的是主站内容,同时JS会根据子域名做相应调整。

4. 排查常见问题

  • 等待DNS生效:Namecheap的DNS修改通常需要10-30分钟才能全球生效,可以用命令nslookup sub.domain.com检查是否已经指向你的GitHub Pages默认域名。
  • 域名验证:如果是第一次绑定自定义域名,GitHub可能要求你添加TXT记录验证所有权,按照Pages设置里的提示完成即可,否则解析可能异常。
  • 分支与文件检查:确保Pages设置中选择的分支(比如maingh-pages)存在,并且分支根目录有index.html等可访问的静态文件。

内容的提问来源于stack exchange,提问作者user4492719

火山引擎 最新活动