处理所有子域的 Cloudflare 页面(自定义域的通配符记录)

问题描述 投票:0回答:1

我在 Cloudflair Pages 中有一个静态应用程序。

要将其连接到域,需要:

  1. 将其添加到自定义域
  2. 然后添加指向
    app-name.pages.dev
    的 CNAME 记录。

虽然 Cloudflare 支持 CNAME 记录中的星号,例如 *.example.com, 似乎无法添加带星号的自定义域,出现错误“必须输入有效域”。

有没有办法配置 Cloudflare Pages,以便 example.com 的所有子域都指向我的应用程序?

cloudflare cloudflare-pages
1个回答
0
投票

不幸的是,截至 2024 年 4 月,您尚不允许在 Cloudflare Pages 上设置通配符子域。

假设您的 Cloudflare 页面托管在

example.com
上,有 2 种替代解决方法取决于您可以接受哪一种:

通过 Cloudflare Workers 路由所有通配符

由于 Cloudflare Workers 支持通配符子域,您可以通过提供 HTML 页面的工作人员路由所有请求(或仅代理到您的 Cloudflare 页面):

export default {
  async fetch(request) {
    const url = new URL(request.url);
    url.hostname = 'example.com';
    return fetch(url.toString(), request);
  },
};

但是请记住,每天只有 100,000 个免费请求。另一种优化是直接通过根域提供静态资产,而不是通过子域代理。

例如,不要在子域中执行此操作(例如

hello.example.com
):

<!DOCTYPE html>
<html>
  <body>
    <script src="/assets/script.js"></script>
  </body>
</html>

改为这样做:

<!DOCTYPE html>
<html>
  <body>
    <script src="https://example.com/assets/script.js"></script>
  </body>
</html>

添加自定义重定向页面规则

如果您可以接受重定向,则可以添加页面规则,将所有对子域的请求重定向到根域。

  1. 创建一个新的代理(橙色云)CNAME 记录到您的 Cloudflare 页面地址(例如 https://example.pages.dev)。请注意,这只是一条虚拟记录,以便页面规则生效。
  2. 转到规则 -> 页面规则并创建新规则
  3. 在配置中输入以下内容:
    • 网址:
      *.example.com/*
    • 设置:转发URL
    • 状态代码:302 临时重定向
    • 目的地网址:
      example.com/$1/$2

通过此设置,当您转到

https://hello.example.com/page?a=1
时,它将重定向到
https://example.com/hello/page?a=1
,您可以在那里提供您的内容。

© www.soinside.com 2019 - 2024. All rights reserved.