(オプション) ウェブページリダイレクトの設定
Amazon S3 バケットがウェブサイトホスティング用に設定されている場合は、ウェブページリダイレクトを設定できます。リダイレクトを設定するには、次のオプションがあります。
トピック
Amazon S3 コンソールを使用したオブジェクトリダイレクトの設定
オブジェクトのメタデータでウェブサイトのリダイレクト場所を設定することで、オブジェクトのリクエストを別のオブジェクトまたは URL にリダイレクトできます。リダイレクトを設定するには、オブジェクトメタデータに
x-amz-website-redirect-location
プロパティを追加します。Amazon S3 コンソールで、オブジェクトのメタデータ内の [Website Redirect Location (ウェブサイトのリダイレクト場所)] を設定できます。Amazon S3 API を使用する場合は、x-amz-website-redirect-location
を設定します。ウェブサイトは 301 リダイレクトとしてオブジェクトを解釈します。
リクエストを別のオブジェクトにリダイレクトするには、リダイレクト場所をターゲットオブジェクトのキーに設定します。リクエストを外部 URL にリダイレクトするには、リダイレクト場所を目的の URL に設定します。オブジェクトメタデータの詳細については、システムで定義されたオブジェクトメタデータ を参照してください。
ページリダイレクトを設定するときに、ソースオブジェクトコンテンツを維持することも、削除することもできます。たとえば、バケットに page1.html
オブジェクトがある場合、このページのリクエストを別のオブジェクト page2.html
にリダイレクトできます。これには2つのオプションがあります。
-
page1.html
オブジェクトのコンテンツを維持して、ページリクエストをリダイレクトします。 -
page1.html
のコンテンツを削除し、page1.html
という名前の 0 バイトのオブジェクトをアップロードして、既存のオブジェクトを置き換え、ページリクエストをリダイレクトします。
オブジェクトのリクエストをリダイレクトするには
-
Amazon S3 コンソール (https://console.aws.amazon.com/s3/
) を開きます。 -
[Buckets (バケット)] リストで、静的ウェブサイトとして設定したバケットの名前を選択します (例:
example.com
)。 -
[Objects (オブジェクト)] でオブジェクトを選択します。
-
[Actions (アクション)] を選択し、[Edit metadata (メタデータの編集)] を選択します。
-
[メタデータ] を選択します。
-
[Add Metadata (メタデータの追加)] を選択します。
-
[Type (タイプ)] で、[System Defined (システム定義)] を選択します。
-
[Key (キー)]で、[x-amz-website-redirect-location] を選択します。
-
[値] に、リダイレクト先のオブジェクトのキー名を入力します (例:
/page2.html
)。同じバケット内の別のオブジェクトでは、値の
/
プレフィックスが必要です。値を外部 URL に設定することもできます (例:http://www.example.com
)。 -
[Edit metadata (メタデータの編集)] を選択します。
REST API を使用したオブジェクトリダイレクトの設定
次の Amazon S3 API アクションは、リクエストの x-amz-website-redirect-location
ヘッダーをサポートしています。Amazon S3 はオブジェクトメタデータのヘッダー値を x-amz-website-redirect-location
として保存します。
ウェブサイトホスティング用に設定されたバケットには、ウェブサイトエンドポイントと REST エンドポイントの両方があります。リクエストされたページが 301 リダイレクトとして設定されている場合の結果は、リクエストのエンドポイントに応じて、次のようになると考えられます。
-
リージョン固有のウェブサイトエンドポイント – Amazon S3 は、
x-amz-website-redirect-location
プロパティの値に従ってページリクエストをリダイレクトします。 -
REST エンドポイント – Amazon S3 はページリクエストをリダイレクトしません。リクエストされたオブジェクトを返します。
エンドポイントの詳細については、「ウェブサイトエンドポイントと REST API エンドポイントの主な違い」を参照してください。
ページリダイレクトを設定する場合、オブジェクトのコンテンツを維持するか、削除できます。たとえば、バケットに page1.html
というオブジェクトがあるとします。
-
page1.html
のコンテンツを維持し、ページリクエストのリダイレクトのみを行う場合は、PUT Object - Copy リクエストを送信して新しいpage1.html
オブジェクトを作成し、送信元として既存のpage1.html
オブジェクトを使用するように設定します。リクエストに、x-amz-website-redirect-location
ヘッダーを設定します。リクエストが完了すると、元のページのコンテンツは変更されないままですが、Amazon S3 によりページへのすべてのリクエストは指定されたリダイレクト場所にリダイレクトされます。 -
page1.html
オブジェクトのコンテンツを削除してこのページに対するリクエストをリダイレクトするには、PUT Object リクエストを送信して 0 バイトのオブジェクトをアップロードします。このオブジェクトには、同じオブジェクトキーpage1.html
を付けます。この PUT リクエストの中で、x-amz-website-redirect-location
のpage1.html
を新しいオブジェクトに設定します。このリクエストが完了すると、page1.html
にはコンテンツがない状態になり、リクエストはx-amz-website-redirect-location
で指定された場所にリダイレクトされます。
GET Object アクションを使用して、他のオブジェクトメタデータと一緒にオブジェクトを取得すると、Amazon S3 はレスポンスで x-amz-website-redirect-location
ヘッダーを返します。
バケットのウェブサイトエンドポイントに対するリクエストを別のホストにリダイレクトする
バケットのウェブサイトエンドポイントに対するすべてのリクエストを別のホストにリダイレクトできます。すべてのリクエストをリダイレクトすると、ウェブサイトエンドポイントに対するすべてのリクエストが指定先のホスト名にリダイレクトされます。
たとえば、ルートドメインが example.com
であり、http://example.com
および http://www.example.com
の両方のリクエストに対応する場合は、example.com
および www.example.com
という 2 つのバケットを作成できます。次に、example.com
バケット内のコンテンツを保持し、他の www.example.com
バケットからすべてのリクエストを example.com
バケットにリダイレクトするように設定します。詳細については、「カスタムドメイン名を使用して静的ウェブサイトを設定する」を参照してください。
バケットウェブサイトエンドポイントにリクエストをリダイレクトするには
-
Amazon S3 コンソール (https://console.aws.amazon.com/s3/
) を開きます。 -
[Buckets (バケット)] で、リクエストをリダイレクトするバケットの名前 (
www.example.com
など)を選択します。 -
[プロパティ] を選択します。
-
[静的ウェブサイトホスティング] で [編集] を選択します。
-
[Redirect requests for an object (オブジェクトのリクエストをリダイレクト)] を選択します。
-
[Host name (ホスト名)] ボックスに、バケットまたはカスタムドメインのウェブサイトエンドポイントを入力します。
たとえば、ルートドメインアドレスにリダイレクトする場合は、「
example.com
」と入力します。 -
[Protocol (プロトコル)] で、リダイレクトされた要求のプロトコル ([none]、[http]、または [https]) を選択します。
プロトコルを指定しない場合、デフォルトのオプションは [none] です。
-
[Save changes] を選択します。
高度な条件付きリダイレクトの設定
高度な条件付きリダイレクトルールを使用すると、条件に応じてリクエストのルーティング先を変えることができます。この条件として使用できるのは、特定のオブジェクトキー名、リクエストの中のプレフィックス、またはレスポンスコードです。たとえば、バケット内のあるオブジェクトを削除する、または名前を変更する場合は、リクエストを別のオブジェクトにリダイレクトするルーティングルールを追加します。フォルダを使用できなくする場合は、ルーティングルールを追加して別のウェブページにリクエストをリダイレクトできます。ルーティングルールは、エラー状態を処理するために追加することもできます。その場合は、エラーの処理時に、エラーを発生させたリクエストを別のドメインにリダイレクトします。
バケットをウェブサイトホスティング用に設定するときは、高度なリダイレクトルールを指定することもできます。Amazon S3 では、ウェブサイト設定ごとのルーティングルールの数が 50 に制限されています。50 を超えるルーティングルールが必要な場合は、オブジェクトリダイレクトを使用できます。詳細については、「Amazon S3 コンソールを使用したオブジェクトリダイレクトの設定」を参照してください。
新しい Amazon S3 コンソールでリダイレクトルールを作成するには、JSON を使用する必要があります。REST API を使用したルーティングルールの設定の詳細については、Amazon Simple Storage Service API リファレンスの「PutBucketWebsite」を参照してください。
静的ウェブサイトのリダイレクトルールを設定するには
静的ウェブサイトホスティングがすでに有効になっているバケットのリダイレクトルールを追加するには、次の手順に従います。
-
Amazon S3 コンソール (https://console.aws.amazon.com/s3/
) を開きます。 -
[バケット] リストで、静的ウェブサイトとして設定したバケットの名前を選択します。
-
[プロパティ] を選択します。
-
[静的ウェブサイトホスティング] で [編集] を選択します。
-
[Redirection rules (リダイレクトルール) ] ボックスに、JSON にリダイレクトルールを入力します。
S3 コンソールでは、JSON を使用してルールを記述します。リダイレクションルールを指定する一般的な構文と例については、「ルーティングルール要素」を参照してください。Amazon S3 では、ウェブサイト設定ごとのルーティングルールの数が 50 に制限されています。
-
[Save changes] を選択します。
ルーティングルール要素
ウェブサイト設定でルーティングルールを定義するための一般的な構文を次に示します。
新しい S3 コンソールでリダイレクトルールを設定するには、JSON を使用する必要があります。
<RoutingRules> = <RoutingRules> <RoutingRule>...</RoutingRule> [<RoutingRule>...</RoutingRule> ...] </RoutingRules> <RoutingRule> = <RoutingRule> [ <Condition>...</Condition> ] <Redirect>...</Redirect> </RoutingRule> <Condition> = <Condition> [ <KeyPrefixEquals>...</KeyPrefixEquals> ] [ <HttpErrorCodeReturnedEquals>...</HttpErrorCodeReturnedEquals> ] </Condition> Note: <Condition> must have at least one child element. <Redirect> = <Redirect> [ <HostName>...</HostName> ] [ <Protocol>...</Protocol> ] [ <ReplaceKeyPrefixWith>...</ReplaceKeyPrefixWith> ] [ <ReplaceKeyWith>...</ReplaceKeyWith> ] [ <HttpRedirectCode>...</HttpRedirectCode> ] </Redirect> Note: <Redirect> must have at least one child element. Also, you can have either ReplaceKeyPrefix with or ReplaceKeyWith, but not both.
次の表は、ルーティングルールの要素をまとめたものです。
名前 | 説明 |
---|---|
RoutingRules |
RoutingRule 要素のコレクションを入れるコンテナ。
|
RoutingRule |
条件とリダイレクトを明示したルール。この条件が満たされたときにこのリダイレクトが適用されます。 条件:
|
Condition |
条件を記述するためのコンテナ。この条件が満たされているときに、指定されたリダイレクトが適用されます。ルーティングルールの中に条件がない場合は、そのルールはすべてのリクエストに適用されます。 |
KeyPrefixEquals |
リクエストをリダイレクトするオブジェクトキー名のプレフィックス。
|
HttpErrorCodeReturnedEquals |
この HTTP エラーコードに一致している場合にのみ、リダイレクトが適用されます。エラーが発生した場合、エラーコードがこの値に等しい場合は、指定されたリダイレクトが適用されます。
|
Redirect |
コンテナ要素。リクエストのリダイレクトに関する指示を表すのに使用されます。リクエストを別のホストや別のページにリダイレクトすることも、別のプロトコルの使用を指定することもできます。 |
Protocol |
レスポンスとして返される 同レベルの要素の 1 つが指定されている場合、 |
HostName |
レスポンスとして返される 同レベルの要素の 1 つが指定されている場合、 |
ReplaceKeyPrefixWith |
リダイレクトリクエストの中の 同レベルの要素の 1 つが指定されている場合、 |
ReplaceKeyWith |
レスポンスとして返される 同レベルの要素の 1 つが指定されている場合、 |
HttpRedirectCode |
レスポンスとして返される 同レベルの要素の 1 つが指定されている場合、 |
例
次の例では、一般的なリダイレクトタスクについて説明します。
新しい Amazon S3 コンソールでリダイレクトルールを作成するには、JSON を使用する必要があります。
例 1: キープレフィックスの名前を変更した後にリダイレクトする
バケットに次のオブジェクトが含まれているとします。
-
index.html
-
docs/article1.html
-
docs/article2.html
フォルダ名を docs/
から documents/
に変更することにしました。この変更を行った後は、プレフィックス docs/
に対するリクエストを documents/
にリダイレクトする必要があります。たとえば、docs/article1.html
に対するリクエストを documents/article1.html
にリダイレクトします。
この場合、次のルーティングルールをウェブサイト設定に追加します。
例 2: 削除されたフォルダに対するリクエストをページにリダイレクトする
images/
フォルダ (つまり、キープレフィックスが images/
のすべてのオブジェクト) を削除するとします。ルーティングルールを追加し、その中で、キープレフィックス images/
を持つオブジェクトに対するリクエストをすべて folderdeleted.html
というページにリダイレクトするように設定します。
例 3: HTTP エラーの場合にリダイレクトする
リクエストされたオブジェクトが見つからないときに、リクエストを Amazon Elastic Compute Cloud (Amazon EC2) インスタンスにリダイレクトするとします。リダイレクトルールを追加し、その中で、HTTP
ステータスコード 404 (Not Found)
が返されたときに、リクエストを処理する Amazon EC2 インスタンスにリダイレクトするように設定します。
次に示す例では、オブジェクトキープレフィックス report-404/
もリダイレクトに挿入しています。たとえば、ExamplePage.html
というページをリクエストした結果が HTTP 404 エラーとなったときは、指定の Amazon EC2 インスタンスにある report-404/ExamplePage.html
というページにリクエストをリダイレクトします。ルーティングルールが何も設定されていない場合に HTTP エラー 404 が発生したときは、設定内で指定されているエラードキュメントが返されます。