如何為 S3 託管網站在其前面啟用 CloudFront 的域上的重定向?
我正在嘗試讓重定向在 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 重定向到 /; 這是我的設置方式:
編輯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-read
ACL 的現有對像或索引文件匹配。如果這不符合預期,您也可以將其更改為匹配 404,但不要這樣做。如果 404 有效,這意味著您的儲存桶策略過於寬鬆,允許未經身份驗證的使用者列出您的儲存桶內容……所以,不要更改它 - 修復您的策略。在這裡使用 403。