S3静的Webサイトがあり、すべてのリクエストをインデックスページにリダイレクトしたい。したがって、mysite.com/this_doesnt_exist
に移動すると、mysite.com
にリダイレクトされます。
上の画像のようなカスタムエラー応答を使用してこの動作を構成できましたが、mysite.com/this_doesnt_exist
にアクセスするとインデックスページが表示されます。ただし、URLはアドレスバーで変更されません。 変更してほしい
S3バケットのリダイレクトルールセクションも使用してみましたが、CloudFrontが設定されていると機能しないようです。 CloudFrontを構成せずに環境をテストするための別のバケットがあり、次のルールで機能しました。
<RoutingRules>
<RoutingRule>
<Condition>
<HttpErrorCodeReturnedEquals>403</HttpErrorCodeReturnedEquals>
</Condition>
<Redirect>
<ReplaceKeyWith/>
</Redirect>
</RoutingRule>
</RoutingRules>
S3リダイレクトルールが機能するように、オリジンドメイン名をexample-bucket.s3.amazonaws.com
からexample-bucket.s3-website.${region}.amazonaws.com
に変更します(バケットの実際のリージョンに置き換えます)。 CloudFrontでのデフォルトのバケット選択は、バケットのRESTエンドポイント用であり、リダイレクトルールを処理しません。
リダイレクトルールの<Redirect>
ブロックを変更して、S3リダイレクトによって生成されたLocation
ヘッダーが正しいホスト名に送信されるようにします(そうしないと、ブラウザーがバケットのウェブサイトホスティングエンドポイントに直接リダイレクトされる傾向があります) )。ここで、www.example.com
は、CloudFrontディストリビューションを指すホスト名です。
<Redirect>
<Protocol>https</Protocol>
<HostName>www.example.com</HostName>
<ReplaceKeyWith/>
</Redirect>
カスタムエラー設定を削除します。
/*
のCloudFront無効化を作成します。
すべてが伝播するのを待って、再テストします。