当 url 没有斜杠时,AWS s3 强制 302 重定向 - 需要 301s
Posted
技术标签:
【中文标题】当 url 没有斜杠时,AWS s3 强制 302 重定向 - 需要 301s【英文标题】:AWS s3 forces 302 redirects when url has no trailing slash - need 301s 【发布时间】:2015-07-17 09:18:23 【问题描述】:我正在将 Wordpress 网站迁移到托管在 Amazon s3 存储桶中的静态网站。所有页面都在一个目录结构中(例如 blog/index.html),但可以通过 /blog/ 访问。
默认情况下,亚马逊通过 302 重定向 (www.site.com/page -- 302 --> www.site.com/page/) 重定向缺少尾部斜杠的 URL。这对 SEO 来说太糟糕了,我正在尝试将这些重定向设为 301。
我尝试在根目录中添加 page.html 对象,并按照亚马逊的说明设置重定向到 /page/。这只会为 /page.html 创建 301。 /page 仍然会导致 302。
亚马逊的重定向说明: http://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html
关于问题的相关博文: http://moz.com/community/q/new-static-site-with-302s
有没有人遇到过这种情况,或者有什么想法我能做什么?
【问题讨论】:
【参考方案1】:您现在可以使用 CloudFront 和 Lambda@Edge 解决此问题。您可以使用 'origin response' 事件拦截从 S3 返回的请求,然后将响应状态码更改为 301。
以下是您需要添加到 Lambda 处理程序的代码。
exports.handler = async (event) =>
const response = event.Records[0].cf.response;
if (response.status === '302')
response.status = '301';
response.statusDescription = 'Moved Permanently'
return response;
;
这是一篇博文,我写的,详细解释了如何做到这一点
https://www.vividbytes.io/fixing-redirect-codes-on-static-s3-websites/
【讨论】:
【参考方案2】:根据docs,返回302确实是他们的设计:
...如果您从前面的 URL 中排除尾部斜杠,Amazon S3 首先会在存储桶中查找对象
photos
。如果找不到photos
对象,则它会搜索索引文档photos/index.html
。如果找到该文档,Amazon S3 将返回302 Found
消息并指向photos/
键。对于对photos/
的后续请求,Amazon S3 返回photos/index.html
。"
按照他们文档的字母,尝试将您的 page.html
对象重命名为简单地称为 page
(不带 .html 扩展名)。您必须为每个包含尾部斜杠的 URL 执行此操作,这很糟糕,但在亚马逊允许我们为此行为配置实际的重定向代码之前,我们一直坚持这样做。
【讨论】:
以上是关于当 url 没有斜杠时,AWS s3 强制 302 重定向 - 需要 301s的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 django 和 aws s3 在点击时强制下载图像
AFNetworking 2.0:NSURLSessionDownloadTask 在收到 302 到 AWS S3 时被取消
Chef 12 + AWS Opsworks + 从 s3 部署应用程序