将深入分析和解决在 Vercel 根目录使用 vercel.json 配置自定义域名重定向时可能出现的异常问题。我们将探讨如何正确配置重定向规则,包括如何处理 HTTP 路径、源域名与目标域名的匹配,并提供调试技巧,帮助开发者避免常见的配置错误。
chou403
/ Vercel
/ c:
/ u:
/ 4 min read
一学一个不吱声
异常:Too many redirects occurred trying to open “https://uchou.me”. This might occur if you open a page that is redirected to open another page which then is redirected to open the original page.
出现 “Too many redirects” 的问题,通常是因为你的重定向规则导致了循环重定向。以下是导致问题的可能原因及解决方法:
问题分析
-
Vercel 默认域名和自定义域名的重定向循环:
- 当你在 Vercel 配置了重定向规则,将默认域名(
your-site.vercel.app
)跳转到自定义域名(uchou.me
),同时自定义域名通过 DNS 或其他规则又指回了默认域名,就会导致循环。
- 当你在 Vercel 配置了重定向规则,将默认域名(
-
HTTPS 重定向设置冲突:
- 如果 Vercel 和 Cloudflare 同时配置了 HTTPS 强制重定向,可能产生冲突。
-
Cloudflare 和 Vercel 配置不匹配:
- Cloudflare 的 DNS 或 Page Rules 与 Vercel 的重定向配置产生冲突。
解决方法
1. 检查并修复重定向规则
在 Vercel 和 Cloudflare 的配置中,确保重定向规则不会互相循环。
Vercel 重定向规则
-
确保你只在 自定义域名 的情况下执行重定向:
- 编辑项目根目录的
vercel.json
文件,添加以下配置:{ "redirects": [ { "source": "/(.*)", "has": [{ "type": "host", "value": "your-site.vercel.app" }], "destination": "https://uchou.me/$1", "statusCode": 301 } ] }
- 解释:
- 只有当访问的域名是
your-site.vercel.app
时,才会重定向到uchou.me
。 - 避免自定义域名再次触发同样的规则。
- 只有当访问的域名是
- 编辑项目根目录的
-
部署更新:
- 提交更改并重新部署到 Vercel。
2. 检查 Cloudflare 配置
如果你的自定义域名通过 Cloudflare 管理 DNS,请确认以下设置:
DNS 配置
- 确保 CNAME 记录正确指向 Vercel:
- Type: CNAME
- Name:
@
(或你的子域,如www
) - Value:
cname.vercel-dns.com
- Proxy status: 设置为 Proxied。
Page Rules
-
确保 Cloudflare 的重定向规则不会冲突:
- 如果你在 Cloudflare 添加了类似的重定向规则,请禁用或删除。
-
清除缓存:
- 在 Cloudflare Dashboard 中,进入 Caching > Configuration,点击 Purge Everything。
3. 检查 HTTPS 设置
Vercel 配置
-
确保在 Vercel 中启用了 HTTPS:
- 在 Settings > Domains 中,确认自定义域名有
Active SSL
标记。
- 在 Settings > Domains 中,确认自定义域名有
-
禁用重复的强制 HTTPS 重定向:
- 如果 Vercel 自动处理 HTTPS 重定向,不需要在
vercel.json
或代码中手动添加。
- 如果 Vercel 自动处理 HTTPS 重定向,不需要在
Cloudflare 配置
- 在 Cloudflare 的 SSL/TLS > Overview 中:
- 将 SSL 模式设置为 Full 或 Full (Strict)。
- 确保未启用 Always Use HTTPS(如果 Vercel已经启用 HTTPS)。
4. 测试并验证
- 清除浏览器缓存和 Cookies。
- 通过工具检查重定向链(例如 Redirect Checker)。
- 直接访问默认域名(
your-site.vercel.app
)和自定义域名(uchou.me
),验证重定向行为是否正常。
总结
- 避免循环重定向的关键:
- 在 Vercel 中限定默认域名的重定向规则。
- 确保 Cloudflare 和 Vercel 的重定向配置互相匹配且无冲突。
- 避免重复的 HTTPS 强制规则。