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

时间:2015-05-07 01:10:23

标签: redirect amazon-web-services amazon-s3 http-headers http-redirect

我将Wordpress网站迁移到托管在Amazon s3存储桶中的静态网站。所有页面都在目录结构中(例如,blog / index.html),但可以通过/ blog /访问。

默认情况下,Amazon会通过302重定向重定向缺少尾随斜杠的网址(www.site.com/page - 302 - > www.site.com/page/)。这对搜索引擎优化来说太糟糕了,我试图让这些重定向成为301。

我尝试在根目录中添加page.html对象,并根据亚马逊的说明设置重定向到/ page /。这只会为/page.html创建301s。 / 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

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

2 个答案:

答案 0 :(得分:4)

您现在可以使用CloudFront和Lambda @ Edge解决此问题。您可以使用“原始响应”事件拦截从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/

答案 1 :(得分:3)

根据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执行此操作,但我们一直坚持使用它,直到Amazon允许我们为此行为配置实际的重定向代码。