当 url 没有尾部斜杠时,AWS s3 强制 302 重定向 - 需要 301s

nrl*_*rlr 6 redirect amazon-s3 http-redirect amazon-web-services http-headers

我正在将 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

有没有人遇到过这个,或者有什么想法我能做什么?

viv*_*tes 8

您现在可以使用 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;
};
Run Code Online (Sandbox Code Playgroud)

这是我写的一篇博客文章,详细解释了如何执行此操作

https://www.vividbytes.io/fixing-redirect-codes-on-static-s3-websites/


小智 6

根据文档,返回 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 执行此操作,这很糟糕,但在亚马逊允许我们为此行为配置实际重定向代码之前,我们一直坚持这样做。