跳转到内容

S3 HEAD bucket 失败: 404 Not Found - CC Switch

Quick fix

endpoint 已含 bucket 名时,需移除配置中的 bucket 字段以避免路径重复拼接。

报错原文
S3 HEAD bucket 失败: 404 Not Found
(https://mybucket.oss-cn-zhongwei.aliyuncs.com/mybucket/)

当 S3 兼容存储(如阿里云 OSS、Cloudflare R2)的 endpoint 采用 virtual-hosted style(即 host 部分已包含 bucket 名称,例如 `https://mybucket.oss-cn-zhongwei.aliyuncs.com`)时,cc-switch v3.18.0 存在 URL 构建逻辑缺陷。

代码中的 `is_aws_endpoint` 函数仅识别 `amazonaws.com`,导致非 AWS 端点被错误地归类为 path-style 分支。在 path-style 模式下,程序会强制在 URL 路径中追加 bucket 名称。由于用户的 endpoint 本身已包含 bucket 名,这导致了路径重复(如 `/mybucket/`),进而引发 HEAD 请求返回 404 Not Found。此外,上传操作也会因此将对象存入错误的前缀下。

  1. 打开 cc-switch 同步设置界面,找到 S3/OSS 存储配置区域。

  2. 检查 Endpoint 地址。如果 Endpoint 是类似 https://<bucket>.oss-cn-<region>.aliyuncs.com 的形式,请将「Bucket」或「Bucket Name」配置项留空或删除其中的内容。

    在 UI 配置中:
    # Endpoint: https://mybucket.oss-cn-zhongwei.aliyuncs.com (保持不变)
    # Bucket: [留空]
  3. 保存配置并重新测试连接。此时 URL 应正确解析为不含重复 bucket 名的格式,HEAD 请求应成功。

ToolClaude Code
Version3.18.0
PlatformsLinux
为什么我的 Endpoint 里已经写了 bucket 名,还要删掉配置里的 bucket?
因为该版本代码无法自动识别非 AWS 的 virtual-hosted style 端点。如果不删除配置中的 bucket 字段,程序会在 URL 路径中再次拼接 bucket 名,导致 404 错误。
我已经上传了文件,现在修复后能读到吗?
可能无法直接读取。由于之前的 bug,文件可能被存入了错误的嵌套前缀(如 `mybucket/cc-switch-sync/v2/...`)。你需要手动在存储控制台检查并移动文件到正确的根目录,或者接受数据散落在错误路径的事实。
这个 bug 只影响阿里云 OSS 吗?
不,任何使用 virtual-hosted style 且 endpoint 不被 `is_aws_endpoint` 识别的 S3 兼容服务都会受影响,包括 Cloudflare R2、Backblaze B2 等。

这是一个非官方社区 wiki,与 cc-switch 作者及项目本身无隶属关系。内容整理自项目公开的 GitHub issues。本站不分发任何软件。