Amazon-Web-Services

如何為 S3 託管網站在其前面啟用 CloudFront 的域上的重定向?

  • August 31, 2016

我正在嘗試讓重定向在 S3 託管的靜態網站的域名內工作。也就是說,如果我指向 mydomain.com/foo,我希望它重定向到 mydomain.com;這應該基本上反映了 mydomain.com.s3-website-us-east-1.amazonaws.com/foo 被重定向到 mydomain.com.s3-website-us-east-1.amazonaws.com。現在發生的事情是 mydomain.com/foo 被重定向到 mydomain.com.s3-website-us-east-1.amazonaws.com/。

我有一個根據Amazon 文件命名的 S3 儲存桶,以確保正確重定向資源。我還將 CloudFront 配置為指向 S3 網站端點 (mydomain.com.s3-website-us-east-1.amazonaws.com),以及在“備用域名 (CNAME)”中設置的域。

在 Route53 中,我創建了一條 A 記錄來指向 CloudFront 的 d123456789.cloudfront.net 域名。因此,現在訪問 mydomain.com 就可以了;但是,嘗試訪問會導致重定向的資源會讓我回到醜陋的 S3 名稱。

如何在混合使用 CloudFront 的同時獲得使我的域名保持在前面和中心的友好重定向行為?

編輯:例如,我試圖將 /upload 重定向到 /; 這是我的設置方式: S3 重定向螢幕截圖

編輯2:為了澄清,將 foo.com/update 重定向到 foo.com/index.html 是最小的情況;理想情況下,我希望能夠將foo.com/ 下的任何資源重定向到 foo.com/index.html,這就是我追求重定向規則解決方案的原因。

您需要在路由規則中指定目標主機名和協議。這會強制Location:具有正確的(所需的)主機名。

重定向幾乎所有內容的最簡單方法是創建一個匹配的路由規則403 Forbidden(因為 S3 預設拒絕所有內容)和您想要的地方。

<RoutingRules>
<RoutingRule>
 <Condition>
   <HttpErrorCodeReturnedEquals>403</HttpErrorCodeReturnedEquals>
 </Condition>
 <Redirect>
  <Protocol>https</Protocol> 
  <HostName>target.example.com</HostName>
  <ReplaceKeyWith></ReplaceKeyWith>
 </Redirect>
</RoutingRule>
</RoutingRules>

所有請求都應重定向到https://target.example.com/,除非請求的 URL 與具有public-readACL 的現有對像或索引文件匹配。

如果這不符合預期,您也可以將其更改為匹配 404,但不要這樣做。如果 404 有效,這意味著您的儲存桶策略過於寬鬆,允許未經身份驗證的使用者列出您的儲存桶內容……所以,不要更改它 - 修復您的策略。在這裡使用 403。

引用自:https://serverfault.com/questions/800068