S3 www 到非 www 重定向将 /index.html 附加到 URL

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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,然后我将其删除,但行为仍然存在。会不会是因为这个?

以上是关于S3 www 到非 www 重定向将 /index.html 附加到 URL的主要内容,如果未能解决你的问题,请参考以下文章

使用 rewrite_mod 将 index.php 重定向到 root,并将 www 重定向到非 www [重复]

在 Route53 和 CloudFront 中将 www 重定向到非 www

域重定向到www时如何将www子域重定向到非www

使用 PHP 将 WWW 重定向到非 WWW 重定向

IIS 将 www 重定向到非 www 和 http 到 https:是不是可以仅使用一个重定向来完成?

apache将http重定向到https,将www重定向到非www