PAYATHON 2026

如何为 Google Apps Script 设置固定的 URL?

技术老齐

可以。Google Apps Script 的 Web 应用可以在每次发布新版本时保留同一个访问 URL,无需第三方重定向。发布时更新已有部署,让它指向新创建的代码版本,部署 URL 和 deployment ID 就都能保留。官方部署说明

如果需要保存代码后立即通过 URL 访问最新代码,可以使用 /dev 测试地址。不过,只有具有脚本编辑权限的用户才能访问这个地址,因此它不适合作为公开服务入口。官方测试说明

为什么更新时会得到不同的 URL?

Apps Script 中的版本(version)和部署(deployment)各有用途:

  • 版本是代码的固定快照,创建后不可修改。
  • 部署是对外提供服务的入口,可以更换它使用的版本。

每次选择“新建部署”都会创建新的入口。要保留固定 URL,就需要更新原部署关联的版本。项目名称不决定 Web 应用的地址。版本与部署的区别

如何发布并保留固定地址

首次发布时:

  1. 打开 Apps Script 项目,选择 Deploy > New deployment。
  2. 将部署类型设为 Web app。
  3. 根据服务需要设置执行身份和访问权限,然后部署。
  4. 复制生成的 Web 应用 URL,供调用方长期使用。

地址通常如下,DEPLOYMENT_ID 是占位符:

https://script.google.com/macros/s/DEPLOYMENT_ID/exec

后续修改代码时:

  1. 保存代码。
  2. 选择 Deploy > Manage deployments。
  3. 选中正在使用的部署,点击编辑图标。
  4. 在版本选项中选择 New version,然后点击 Deploy。

更新后,原来的 /exec URL 就会运行新发布的版本。仅保存代码不会更新正式部署。需要回退时,也可以编辑同一个部署,切换到仍然保留的旧版本。编辑已有部署

GET 服务示例

这个示例返回 JSON,其中 release 是自定义标记,用于辨认发布内容:

function doGet(e) {
  const name = (e && e.parameter && e.parameter.name) || "world";

  const result = {
    message: "Hello, " + name,
    release: "demo-a"
  };

  return ContentService
    .createTextOutput(JSON.stringify(result))
    .setMimeType(ContentService.MimeType.JSON);
}

Web 应用收到 GET 请求时会执行 doGet(e),查询参数通过事件对象 e 传入。Web 应用请求参数说明

部署后,将命令中的 DEPLOYMENT_ID 替换为实际值,就可以调用:

curl -L "https://script.google.com/macros/s/DEPLOYMENT_ID/exec?name=Alice"

之后,把代码中的 release 改为 "demo-b",再按前面的步骤更新原部署,就能通过同一个 URL 获取更新后的内容。

/dev、权限与重定向的注意事项

/dev 地址始终运行最近保存的代码。请从 Deploy > Test deployments 中复制测试地址,直接将 /exec 替换为 /dev 不一定能得到正确的测试链接。访问者必须具有脚本编辑权限,因此不能用这个地址向普通用户开放 HEAD 代码。测试部署说明

固定 URL 仍受访问权限限制。如果服务需要接受匿名 GET 请求,部署就必须允许匿名访问;可用的权限选项取决于账号和组织策略。调用前,应确认执行身份和访问范围符合服务用途。

使用 ContentService 返回内容时,Google 会将请求重定向到 script.googleusercontent.com 上的一次性地址,HTTP 客户端需要跟随重定向。示例中的 curl -L 就是为此设置的。调用方应保存最初的 /exec URL,不要把重定向后的地址当作固定入口。Content Service 重定向说明

备注:内容仅供参考。