为了避免在数据迁移或文件不存在等场景下,客户端访问 OSS 时因 404 错误而中断,可以通过配置重定向规则,让 OSS 在满足特定条件时返回 3xx 跳转响应,将请求无缝引导至源站或其他指定页面,从而保障业务的连续性和用户体验。
工作原理
重定向功能的核心是客户端跳转(Client-Side Redirect)。当客户端通过已绑定自定义域名的 Bucket 访问 OSS 时,若请求触发了设定的规则条件(如 HTTP 404 错误),OSS 服务器会向客户端(如浏览器)返回一个HTTP 3xx
状态码(如 302)和一个包含新地址的Location
响应头。客户端接收到此响应后,会自动向Location
指定的 URL 发起新请求。此过程 OSS 不代理获取源站内容。
自定义404页面
当 OSS 上的某个路径或文件发生特定错误时,可以将其重定向到一个自定义的错误页面或另一个业务处理页面。例如,当通过自定义域名访问 Bucket 中任何文件遇到404 Not Found
错误时,客户端将自动跳转到一个统一的自定义错误页面https://yourdomain/404.html
。
前提条件
在创建重定向规则之前,必须将一个自定义域名绑定到 Bucket。重定向功能仅对通过已绑定到 Bucket 的自定义域名访问生效。通过 OSS 标准域名(http(s)://..aliyuncs.com
)的访问将不会触发重定向规则,而是返回400 Bad Request
错误。
在Bucket 列表页面,单击目标 Bucket。
在左侧导航栏,选择Bucket 配置 > 域名管理,然后单击绑定域名。
在绑定域名面板,输入自定义域名(如果 Bucket 在中国内地需备案),例如
customdomain.com
(请替换为自己的实际域名)。根据提示完成 CNAME 解析配置,将自定义域名解析到 OSS 提供的 CNAME 地址。
步骤一:创建重定向规则
在左侧导航栏,选择数据管理 > 镜像回源。
在镜像回源页面,单击创建规则。
在创建规则面板,配置以下参数:
回源类型:选中重定向。
回源条件:HTTP 状态码设置为404。
回源地址:选中跳转固定地址。
协议(第一列):选择https。
域名(第二列):输入自定义错误页面所在域名,例如yourdomain.com。
路径(第三列):输入自定义错误页面的路径,例如404.html。
重定向 Code:建议选择 302 或 307。由于是错误页面跳转,通常不建议使用 301 永久重定向。
单击确定。
步骤二:验证规则
将以下curl
命令中的customdomain
替换为Bucket绑定的自定义域名,然后访问一个不存在的对象。
curl -I "http://customdomain.com/does-not-exist.html"
预期将返回 302 状态码和正确的 Location
头。
HTTP/1.1 302 Found
Server: AliyunOSS
Date: Wed, 03 Sep 2025 07:25:01 GMT
Content-Length: 0
Connection: keep-alive
x-oss-request-id: 68B7ED4D949F8A38365CC014
Location: http://yourdomain.com/404.html
数据无缝迁移
当将数据从源站(如自建 IDC)逐步迁移至 OSS 时,部分对象可能尚未同步。直接访问这些不存在的对象会导致404 Not Found
错误,影响业务连续性。通过配置重定向规则,可以在访问 OSS 遇到特定 HTTP 错误(如 404)时,向客户端返回一个 3xx 跳转响应,引导客户端无缝跳转至源站地址获取内容。此功能常用于数据平滑迁移的过渡阶段。例如,当通过自定义域名访问 Bucket 中examplefolder/
目录下尚未迁移的文件时,客户端将自动跳转到旧源站https://yourdomain.com/
下的对应路径。
前提条件
在创建重定向规则之前,必须将一个自定义域名绑定到 Bucket。重定向功能仅对通过已绑定到 Bucket 的自定义域名访问生效。通过 OSS 标准域名(http(s)://..aliyuncs.com
)的访问将不会触发重定向规则,而是返回400 Bad Request
错误。
在Bucket 列表页面,单击目标 Bucket。
在左侧导航栏,选择Bucket 配置 > 域名管理,然后单击绑定域名。
在绑定域名面板,输入自定义域名(如果 Bucket 在中国内地需备案),例如
customdomain.com
(请替换为自己的实际域名)。根据提示完成 CNAME 解析配置,将自定义域名解析到 OSS 提供的 CNAME 地址。
步骤一:创建重定向规则
在左侧导航栏,选择数据管理 > 镜像回源。
在镜像回源页面,单击创建规则。
在创建规则面板,配置以下参数:
回源类型: 选中重定向。
回源条件:
HTTP 状态码设置为 404。
文件名前缀: 设置为正在迁移的目录,例如
examplefolder/
。如果希望对整个Bucket生效,此项可留空。
回源地址:选中添加前后缀。这是实现路径无缝对应的关键,请勿选择跳转固定地址。
协议(第一列): 选择旧源站支持的协议,例如https。
域名(第二列): 输入旧源站域名,例如
yourdomain.com
。路径(第三列): 保持为空。因为添加前后缀模式会自动将用户请求的路径(如
examplefolder/file.jpg
)拼接到域名后面。
重定向 Code: 选择 302。302 是临时重定向,非常适合数据迁移这类过渡性场景。请勿使用 301。301是永久重定向,会被浏览器和CDN强缓存,一旦设置,即使后续文件已迁移到OSS,访问仍可能被强制跳转到旧源站,极易引发生产事故。
单击确定。
步骤二:验证规则
将以下curl
命令中的customdomain
替换为Bucket绑定的自定义域名,然后访问一个不存在的对象。
curl -I "http://customdomain.com/examplefolder/does-not-exist.html"
预期将返回 302 状态码和正确的 Location
头。
HTTP/1.1 302 Found
Server: AliyunOSS
Date: Wed, 03 Sep 2025 08:28:21 GMT
Content-Length: 0
Connection: keep-alive
x-oss-request-id: 68B7FC25107134303531344B
Location: https://yourdomain.com/examplefolder/does-not-exist.html
步骤三:数据迁移与切换
迁移完成后,验证 OSS 中的数据完整性。
逐步缩小重定向规则的生效范围(例如,仅针对仍未迁移的特定子目录)或直接禁用规则,最终将流量完全切换至 OSS。
使用限制
生效域名:规则仅对已绑定到 Bucket 的自定义域名的访问生效,对 OSS 标准域名(Bucket Endpoint)不生效。
规则数量:每个 Bucket 最多支持配置 20 条规则。OSS 会根据规则编号(RuleNumber)从小到大依次匹配请求。一旦请求命中某条规则,后续规则将不再执行。
匹配逻辑:文件前缀和后缀的匹配为大小写敏感,且不支持通配符。当配置多条规则时,必须设置不同的文件名前缀或后缀以作区分。
计费说明
使用过程中产生的 OSS 请求和流量将按 OSS 标准用量计费。
常见问题
规则已配置,但访问依然是 404/403,未发生跳转?
请按以下顺序排查:
检查访问域名:确认是否使用了已绑定到 Bucket 的自定义域名进行访问,而不是 OSS 标准域名。使用 OSS 标准域名将导致
400 Bad Request
错误。检查 Bucket 权限与状态码:如果 Bucket 是私有权限,访问不存在的对象通常返回
403 Forbidden
。请确认规则中是否包含了对403
状态码的触发条件。检查规则优先级:确认是否有其他编号更靠前的规则优先命中了该请求。
跳转后的 URL 中出现双斜杠(//)?
这通常是由于路径拼接不当导致。请检查文件名前缀和替换前缀(若使用)的配置。例如,若文件名前缀为path/
,则替换后的前缀应为new-path
,而不是/new-path
,以避免与域名后的/
重复。
修改了重定向规则但未生效?
如果之前使用了301
(永久重定向),浏览器或 CDN 节点可能会强缓存旧的跳转规则。请尝试清除浏览器缓存、强制刷新 CDN 缓存,或使用浏览器的隐身/无痕模式进行测试。
访问时陷入了无限循环重定向?
请检查重定向目标地址。确保目标地址不会直接或间接地再次指向一个会触发 OSS 重定向规则的 URL。特别是在使用 CDN 跟随跳转模式时,要检查 CDN 的回源配置是否错误地将请求又发回了 OSS 的自定义域名。
如何排查命中了哪条规则?
目前 OSS 访问日志中不直接包含命中重定向规则的标识字段。建议通过逐步缩小规则范围或临时禁用其他规则的方式进行排查。也可以在客户端捕获3xx
响应中的Location
头来判断重定向是否按预期发生。