我在 Cloudflair Pages 中有一个静态应用程序。
要将其连接到域,需要:
app-name.pages.dev
的 CNAME 记录。虽然 Cloudflare 支持 CNAME 记录中的星号,例如 *.example.com, 似乎无法添加带星号的自定义域,出现错误“必须输入有效域”。
有没有办法配置 Cloudflare Pages,以便 example.com 的所有子域都指向我的应用程序?
不幸的是,截至 2024 年 4 月,您尚不允许在 Cloudflare Pages 上设置通配符子域。
假设您的 Cloudflare 页面托管在
example.com
上,有 2 种替代解决方法取决于您可以接受哪一种:
由于 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>
如果您可以接受重定向,则可以添加页面规则,将所有对子域的请求重定向到根域。
*.example.com/*
example.com/$1/$2
通过此设置,当您转到
https://hello.example.com/page?a=1
时,它将重定向到 https://example.com/hello/page?a=1
,您可以在那里提供您的内容。