web-dev-qa-db-ja.com

CloudFrontでリダイレクトしますが、URLを変更します

S3静的Webサイトがあり、すべてのリクエストをインデックスページにリダイレクトしたい。したがって、mysite.com/this_doesnt_existに移動すると、mysite.comにリダイレクトされます。

上の画像のようなカスタムエラー応答を使用してこの動作を構成できましたが、mysite.com/this_doesnt_existにアクセスするとインデックスページが表示されます。ただし、URLはアドレスバーで変更されません。 変更してほしい

enter image description here

S3バケットのリダイレクトルールセクションも使用してみましたが、CloudFrontが設定されていると機能しないようです。 CloudFrontを構成せずに環境をテストするための別のバケットがあり、次のルールで機能しました。

<RoutingRules>
  <RoutingRule>
    <Condition>
      <HttpErrorCodeReturnedEquals>403</HttpErrorCodeReturnedEquals>
    </Condition>
    <Redirect>
      <ReplaceKeyWith/>
    </Redirect>
  </RoutingRule>
</RoutingRules>
1
fsinisi90

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無効化を作成します。

すべてが伝播するのを待って、再テストします。

3