通配符子域名实现咨询:搭建类似Blogger的用户动态子站点
动态子域名静态站点实现方案答疑
问题1:使用JS提取子域名的实现方法
分两种运行场景给出对应代码:
浏览器端运行场景
直接从页面地址的host字段拆分即可,适配你的*.example.com场景代码如下:
function extractSubdomain() { const host = window.location.host; const hostSegments = host.split('.'); // 适配根域为二级域名(如example.com)的场景 if (hostSegments.length < 3) return ''; // 无有效子域名时返回空 // 可选:过滤www前缀的情况 return hostSegments[0] === 'www' ? hostSegments[1] : hostSegments[0]; } // 调用示例:extractSubdomain('user1.example.com') 返回 'user1'
Node.js服务端运行场景
如果是在边缘函数、后端服务中运行,从请求头的Host字段取值,拆分逻辑和上述一致。如果需要适配.co.uk这类多级根域名的场景,可以引入psl(公共后缀列表)库做更精准的判断。
问题2:S3按子文件夹存储用户资源的可行性
该方案完全可行,是同类静态多租户站点的常用实现方式,只需要额外补充一层路由映射逻辑即可:
- S3侧可以按照
/{子域名}/{静态资源路径}的规则存储资源,比如user1/index.html、user1/style.css分别对应用户user1的首页和样式文件 - 你需要在CDN层(比如CloudFront、阿里云CDN等)配置边缘函数/路由规则,拿到请求的子域名后,将原请求路径改写为
/${子域名}/${原请求路径},比如用户访问user1.example.com/style.css时,实际向S3请求的路径是/user1/style.css,自动匹配到对应文件夹下的资源
注意事项
- 建议将S3桶设置为私有,仅允许CDN的服务角色访问,避免用户直接访问S3源站绕过子域名映射规则
- 配置默认文档规则,用户访问子域名根路径时,自动改写为对应子文件夹下的
index.html
内容的提问来源于stack exchange,提问作者Chetan Jain
相关产品推荐
相关产品推荐

