使用 NextJS 进行动态子域路由

Ank*_*Ank 7 subdomain wildcard-subdomain next.js dynamic-routing

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

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

另外,如果用户有abc.com域,那么他可以指向abc.comabc.xyz.com 所以”,如果将来有人打开abc.com,则abc.xyz.com可以提供服务。URL 中也abc.com显示了。

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

虚拟主机需要对hosts本地系统中的系统进行更改,而通配符子域纯粹通过路由解决了问题。

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

服务器.js

  ...
    if (pathname === "/demo.demo.com") {
          app.render(req, res, "/demo.demo.com", query);
    }
    ...
Run Code Online (Sandbox Code Playgroud)

在_app.js

static async getInitialProps(appArgument) {
   ...
    return {
      ...
      renderFrom: "demo.demo.com"
    };
  }
Run Code Online (Sandbox Code Playgroud)

在我的主机中我也demo.demo.com指出了localhost

该网站适用于我,demo.demo.com:3000但如何使用数据库和CNAME记录将其推广到生产场景中,并使用用户操作自动添加/更改 CNAME 记录。

Leo*_*cht 6

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

我希望这有帮助!

  • 没有其他方法可以做到这一点吗?我正在编写一个自定义服务器。 (2认同)

Wal*_*rée 5

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

\n

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

\n
\n

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

\n

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

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

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

\n
    \n
  • eda.hashnode.dev
  • \n
  • katycodesstuff.hashnode.dev
  • \n
  • 坑.hashnode.dev
  • \n
\n

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

\n

catalins.tech \xe2\x86\x92pit.hashnode.dev

\n
\n