AWS S3 不喜欢对象路径中有 //
在 AWS S3 中,存储桶(bucket)后的路径就是所存储对象的 key,这个 key 就像文件系统中的路径一样,可以用 / 分隔。但是,与文件系统,或者 Web 中的 URL 不同的是,在 AWS S3 中 / 与 // 是不等价的。
因为,key 中多一个斜杠或少一个斜杠就是两个不同的 key 了,AWS S3 中的 key 只是形式上可以像文件系统一样组织文件对象,但并不会像文件系统一样把 // 与 / 等同看待。这是 AWS S3 的一个特性,而且 AWS S3 也确实允许用户在 a/b 以及 a//b 两个 key 上上传不同的对象。
如,通过以下网址可以访问到本文:
- https://zzz.buzz/zh/2018/03/29/aws-s3-does-not-like-double-slashes/
- https://zzz.buzz/zh/2018/03/29/aws-s3-does-not-like-double-slashes/index.html
- https://s3.amazonaws.com/zzz.buzz/zh/2018/03/29/aws-s3-does-not-like-double-slashes/index.html
而多加一个 / 则不行:
- https://zzz.buzz//zh/2018/03/29/aws-s3-does-not-like-double-slashes/
- https://zzz.buzz//zh/2018/03/29/aws-s3-does-not-like-double-slashes/index.html
-
https://s3.amazonaws.com/zzz.buzz//zh/2018/03/29/aws-s3-does-not-like-double-slashes/index.html
- https://zzz.buzz/zh/2018/03/29/aws-s3-does-not-like-double-slashes//
- https://zzz.buzz/zh/2018/03/29/aws-s3-does-not-like-double-slashes//index.html
- https://s3.amazonaws.com/zzz.buzz/zh/2018/03/29/aws-s3-does-not-like-double-slashes//index.html