5

NextJS 中如何实现动态子域路由功能?

abc示例:如果用户在站点中带有用户名,xyz那么他可以访问他的站点abc.xyz.com

此外,如果用户有abc.com域,那么他可以在将来指向abc.comSo abc.xyz.com ,如果有人打开abc.com然后abc.xyz.com提供服务。在 URL 中也abc.com显示了。

我调查了 NPM 中的几个插件,如 vhost 和通配符子域,但不确定这是解决这个问题的正确方法。

vhost 需要hosts在本地系统中更改系统,而通配符子域纯粹通过路由解决了这个问题。

本地系统设置我已经使用临时工作的代码自定义了Server.js,但似乎不是可以在生产中使用的解决方案:

服务器.js

  ...
    if (pathname === "/demo.demo.com") {
          app.render(req, res, "/demo.demo.com", query);
    }
    ...

_app.js

static async getInitialProps(appArgument) {
   ...
    return {
      ...
      renderFrom: "demo.demo.com"
    };
  }

在我的主人中,我也有demo.demo.com一点localhost

该站点适用于我,demo.demo.com:3000但如何使用数据库和CNAME记录在生产场景中对其进行概括,并使用用户操作自动添加/更改 CNAME 记录。

4

2 回答 2

4

Vercel(Next.js 的创建者)上,我们支持开箱即用的通配符域。在 Next.js 中,您只需从传入请求的标头中读取域,对其进行解析,然后以正确的内容进行响应。

我希望这有帮助!

于 2020-10-19T12:56:01.523 回答
0

我刚刚发现这篇博文https://demo.vercel.pub/platforms-starter-kit,它是 6 天前发布的。

它宣布了https://platformize.co/,这是一个可以做到这一点的产品。

多租户应用程序通过一个统一的代码库为不同子域/自定义域的多个客户提供服务。

例如,这个博客是一个多租户应用程序:

  • 子域:demo.vercel.pub
  • 自定义域:platformize.co(映射到 demo.vercel.pub)
  • 构建你自己的:app.vercel.pub

另一个例子是流行的博客平台Hashnode。每个作者的博客都有自己独特的 .hashnode.dev 子域:

  • eda.hashnode.dev
  • katycodesstuff.hashnode.dev
  • 坑.hashnode.dev

用户还可以将自定义域映射到他们的 .hashnode.dev 子域:

catalins.tech → pit.hashnode.dev

于 2022-01-26T15:04:44.450 回答