六维教程

自定义域名与重定向规则

默认的 项目名.pages.dev 域名能直接访问站点,但要上线一个正式产品,必须用自己的域名。Pages 支持绑定自定义域名并自动签发 HTTPS 证书。除了域名,站点上线后还经常要处理旧链接跳转、设置安全响应头,这些靠 Pages 的 _redirects_headers 两个文件完成。这一篇把三件事一次讲清。

自定义域名

Pages 绑定自定义域名的入口在 项目设置 → 自定义域名,点击 设置自定义域名 后输入你的域名,Pages 会自动处理证书和解析。

绑定过程分两种情况,取决于域名是否托管在 Cloudflare DNS 上。

情况 操作
域名在 Cloudflare DNS Pages 自动添加 CNAME 记录,无需手动配置
域名在其他 DNS 服务商 需要手动到原服务商添加 CNAME 记录指向 Pages

CNAME 记录的目标是 项目名.pages.dev。比如项目名是 my-site,就 CNAME 到 my-site.pages.dev

绑定后 Pages 会自动申请并续期 HTTPS 证书,不用自己操心证书过期。证书签发通常几分钟内完成,DNS 生效慢的话可能要等更久。

支持的域名类型如下。

域名类型 示例 说明
子域名 blog.example.com 最常见,CNAME 即可
根域名 example.com 也支持,需 DNS 服务商配合
泛域名 *.example.com 匹配所有子域名,进阶用法

一个项目能绑定多个自定义域名,比如同时绑 example.comwww.example.com,访问任一地址都能到站点。

DNS 配置细节

域名不在 Cloudflare DNS 上时,手动添加 CNAME 记录要注意几点。

注意点 说明
记录类型 CNAME,不是 A 记录
记录值 项目名.pages.dev
代理状态 在 Cloudflare DNS 上建议开启代理(橙色云朵)
根域名限制 部分 DNS 服务商不支持根域名 CNAME,需用 ALIAS 或转发

根域名 CNAME 一直是个技术限制,DNS 协议原本不允许根域名做 CNAME。Cloudflare DNS 用 CNAME Flattening 解决了这个问题,所以根域名托管在 Cloudflare 上能直接绑。其他服务商要看是否支持类似功能。

绑定完成后状态会显示 活跃,之前是 初始化中。如果长时间停在初始化,多半是 DNS 记录没配对,回 DNS 服务商核对一下。

_redirects 重定向规则

站点改版、换链接结构时,旧地址要跳到新地址,否则收藏夹和外链全部失效。Pages 用一个 _redirects 文件处理这件事,放在构建输出目录的根下,比如 dist/_redirectspublic/_redirects

文件格式每行一条规则,三列用空格分隔。

源路径  目标路径  状态码

常用示例如下。

/old-page  /new-page  301
/blog/2023/*  /archive/:splat  301
/temp  /permanent  302

状态码的含义如下。

状态码 含义 适用场景
301 永久重定向 永久换地址,搜索引擎更新索引
302 临时重定向 临时跳转,保留原地址权重
200 重写(代理) 地址不变但内容来自别处

splat* 配合用,* 匹配路径中的多段,:splat 在目标里引用匹配到的内容。比如 /blog/2023/* 匹配 /blog/2023/hello,重定向到 /archive/hello

_redirects 还有几个要点要注意。

要点 说明
顺序敏感 同一源路径有多条规则时,最上面那条生效
静态规则在前 不带通配符的规则要排在带通配符的规则前面
默认状态码 不写状态码时默认 302
数量限制 静态规则 2000 条,动态规则 100 条
不作用于函数 被 Pages Functions 处理的请求不走 _redirects

_headers 响应头规则

_headers 文件用来给响应附加自定义 HTTP 头,最常见的是加安全头和缓存策略。文件同样放在输出目录根下。

格式分两部分,第一行是路径,下面缩进跟键值对。

/secure-page
  X-Frame-Options: DENY
  X-Content-Type-Options: nosniff

/assets/*
  Cache-Control: public, max-age=31536000

常用的安全头如下。

响应头 作用
X-Frame-Options 防止页面被 iframe 嵌套
X-Content-Type-Options 禁止浏览器猜测内容类型
Referrer-Policy 控制 Referer 头泄露
Content-Security-Policy 限制资源加载来源
Strict-Transport-Security 强制 HTTPS

/assets/* 这种通配路径常用来给带哈希的静态资源设长缓存,因为文件名带哈希,内容变了文件名也变,不用担心缓存不更新。

_headers 同样有几个要点。

要点 说明
规则叠加 一个请求匹配多条规则时,所有头都生效
优先级 _redirects 先于 _headers 生效,两者冲突时重定向赢
不作用于函数 Pages Functions 的响应头要在函数代码里设置
数量限制 最多 100 条规则,每行不超过 2000 字符

路由优先级

静态文件、_redirects_headers、Pages Functions 一起存在时,按固定优先级处理请求。搞清楚顺序才不会调不出预期效果。

优先级 来源 说明
1 Pages Functions _routes.json 包含的路径交给函数,其他规则都不生效
2 _redirects 非函数请求总会检查重定向,即使源路径有静态文件也跳转
3 静态文件 没有重定向命中时才返回静态文件
4 _headers 给静态文件响应附加头

最常踩的坑是写了重定向规则但没生效。一查发现这条路径被 Pages Functions 接管了,或者规则顺序写反。把函数路由排除掉,或者调整规则顺序,就能解决。

把域名、重定向、响应头这三件事配好,一个正式上线的站点基础就齐了。下一篇开始讲 Pages Functions,给静态站点加上动态能力。

上一篇 构建配置与预览部署
下一篇 Pages Functions 基础

上一篇
构建配置与预览部署
下一篇
Pages Functions 基础