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