如何在Vercel中获取部署域名而非带哈希的唯一部署URL?
获取Vercel项目的自定义/主域名方法
如果想获取Vercel项目的主域名(而非带唯一hash的部署临时URL),可以通过以下几种方式实现:
1. 手动配置固定环境变量
- 进入Vercel项目的「设置」-「环境变量」页面,添加一个自定义变量(比如
NEXT_PUBLIC_APP_DOMAIN),直接填入你的项目主域名——可以是Vercel分配的默认主域名(格式为<project-name>-<scope-slug>.vercel.app),也可以是你绑定的自定义域名。部署后所有实例都会读取这个固定值,不会包含部署专属的hash串。
2. 通过Vercel API查询
调用Vercel官方的项目域名查询接口,获取已绑定的所有域名,筛选出标记为主域名的条目。需要提前在Vercel账户中生成API令牌,并在代码中通过后端请求完成查询:
// 示例Node.js后端代码 const fetch = require('node-fetch'); async function getPrimaryDomain() { const projectId = process.env.VERCEL_PROJECT_ID; const apiToken = process.env.VERCEL_API_TOKEN; const response = await fetch(`https://api.vercel.com/v9/projects/${projectId}/domains`, { headers: { 'Authorization': `Bearer ${apiToken}` } }); const domains = await response.json(); // 返回标记为primary的主域名,若无则返回第一个绑定的域名 return domains.find(domain => domain.primary)?.name || domains[0]?.name; }
注:该方法需要后端环境支持,前端无法直接调用(会跨域),且需妥善保管API令牌,避免泄露。
3. 从现有环境变量提取(仅适用于默认Vercel域名)
如果只能依赖VERCEL_URL环境变量,可以通过字符串处理去掉中间的hash部分:
// 示例:从带hash的Vercel URL中提取主域名格式 const getMainVercelDomain = (vercelUrl) => { const urlParts = vercelUrl.split('-'); // 拼接项目名称和scope标识,加上vercel.app后缀 return `${urlParts[0]}-${urlParts.at(-1)}.vercel.app`; }; // 使用示例 const mainDomain = getMainVercelDomain(process.env.VERCEL_URL);
注意:这种方法仅对Vercel自动生成的默认域名有效,如果你绑定了自定义域名,直接使用自定义域名即可,无需做字符串处理。
内容的提问来源于stack exchange,提问作者Shamoon
相关产品推荐
相关产品推荐

