【问题标题】:S3 www to non-www redirect appends /index.html to the URLS3 www 到非 www 重定向将 /index.html 附加到 URL
【发布时间】:2021-12-02 21:52:30
【问题描述】:

假设我的域是 example.com,我已经使用两个 S3 存储桶、两个 CloudFront 分配根据 this 博客文章设置 www 到非 www 重定向,并在指向 example.com 的 www 存储桶中设置重定向。

这很好用,但它实际上重定向到example.com/index.html。是否可以将其重定向到example.com

【问题讨论】:

    标签: amazon-s3 redirect single-page-application amazon-cloudfront


    【解决方案1】:

    您的发行版配置中是否有任何具有index.html 的内容?我不能说为什么您会看到附加了 index.html 的重定向,但执行此操作的更简单方法(无需两个存储桶,并且对重定向有更多控制权)是使用 CloudFront 函数(可在 CloudFront 控制台的函数 部分)。这是一个例子:

        function handler(event) {
            var request = event.request;
            var host = request.headers.host.value;
    
            if (host === 'www.example.com') {    
                var response = {
                    statusCode: 301,
                    statusDescription: 'Moved Permanently',
                    headers: { 
                        'location': { 'value': `https://example.com${request.uri}` } 
                    }
                };
    
                return response;
            }
    
            return request;
        }
    

    您可以将此设置为查看器请求函数,并将其附加到缓存行为。使用此设置,您只需要将 example.com 和 www.example.com 都设置为备用域名的单个发行版。

    如果您需要将index.html 设置为您的根对象,您也可以在主机不是www.example.com 时通过修改request.uri 在函数中执行此操作 - 如果您对index.html 有任何引用,请使用此方法在您的发行版中,您可以将其全部移至此功能。这是一个示例函数,演示了如何在将请求发送到 S3 之前重写 URI(确保面向外部的 URL 不变): https://github.com/aws-samples/amazon-cloudfront-functions/tree/main/url-rewrite-single-page-apps

    【讨论】:

    • 我不希望产生额外的费用并且不使用 CloudFront 功能。在这种情况下,我之前在 CloudFront 分配中将 defaultRootObject 设置为 index.html,然后我将其删除,但行为仍然存在。会不会是因为这个?
    猜你喜欢
    • 2011-06-24
    • 1970-01-01
    • 2019-03-09
    • 2011-11-05
    • 2013-12-20
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多