AWS S3を使ったリダイレクトの方法


AWS S3上に置いていた静的コンテンツを部分的に別サーバー等に移設した際など
特定のパスへのアクセスを別サーバー等にリダイレクトする設定です。

対象のS3の
「プロパティ」>「Static website hosting」>「このバケットを使用してウェブサイトをホストする」
にリダイレクトルールという欄があるので、以下のように設定します。

この例では①〜③のリダイレクトルール(RoutingRule)を設定しています。

<RoutingRules>
  <RoutingRule>   ・・・①
    <Condition>
      <KeyPrefixEquals>kokojanai_dokoka.html</KeyPrefixEquals>
    </Condition>
    <Redirect>
      <Protocol>https</Protocol>
      <HostName>new-server.co.jp</HostName>
      <ReplaceKeyWith>kokodayo.html</ReplaceKeyWith>
    </Redirect>
  </RoutingRule>
  <RoutingRule>   ・・・②
    <Condition>
      <HttpErrorCodeReturnedEquals>403</HttpErrorCodeReturnedEquals>
    </Condition>
    <Redirect>
      <Protocol>https</Protocol>
      <HostName>new-server.co.jp</HostName>
    </Redirect>
  </RoutingRule>
  <RoutingRule>   ・・・③
    <Condition>
      <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
    </Condition>
    <Redirect>
      <Protocol>https</Protocol>
      <HostName>new-server.co.jp</HostName>
    </Redirect>
  </RoutingRule>
</RoutingRules>

①特定パスへのアクセス

特定のパスへアクセスがあった際にパスを書き換えてリダイレクトします。
S3から新サーバー等に移設した際にパスが変わった場合などに使えます。

設定する値は以下の通りです。

設定項目 設定値 サンプル値
KeyPrefixEquals このパスにアクセスがあったらリダイレクトします。 kokojanai_dokoka.html
Protocol リダイレクト先のプロトコルです https
HostName リダイレクト先のホスト名です new-server.co.jp
ReplaceKeyWith KeyPrefixEqualsの値をこの値で置き換えます。 kokoday.html

サンプルではS3にs3-sample.co.jpというDNSを割り振って使っていたとすると
https://s3-sample.co.jp/kokojanai_dokoka.htmlへのアクセスは
https://new-server.co.jp/kokodayo.htmlへリダイレクトされます。


②③ S3上に存在しないパスへのアクセス

S3上に存在しないパスへアクセスがあった場合に別サーバー等へ同パスのままリダイレクトします。
S3から新サーバー等に同パスのまま移設した際に使えます。
②と③はHttpErrorCodeReturnedEquals以外は同じです。

設定項目 設定値 サンプル値
HttpErrorCodeReturnedEquals S3の応答HTTPコードが何だったらリダイレクトするか 403 および 404※
Protocol リダイレクト先のプロトコルです https
HostName リダイレクト先のホスト名です new-server.co.jp

※S3上に存在しないパスの場合404だけじゃなく403を返すパターンもあるようなので念の為両方書いています。

サンプルではS3にs3-sample.co.jpというDNSを割り振って使っていたとすると
https://s3-sample.co.jp/hoge.htmlへのアクセスは
https://new-server.co.jp/hoge.htmlへリダイレクトされます。