(オプション) ウェブページリダイレクトの設定 - Amazon Simple Storage Service

(オプション) ウェブページリダイレクトの設定

Amazon S3 バケットがウェブサイトホスティング用に設定されている場合は、ウェブページリダイレクトを設定できます。リダイレクトを設定するには、次のオプションがあります。

Amazon S3 コンソールでのページリダイレクトの設定

オブジェクトのメタデータでウェブサイトのリダイレクト場所を設定することで、オブジェクトのリクエストを別のオブジェクトまたは URL にリダイレクトできます。リダイレクトを設定するには、オブジェクトメタデータに x-amz-website-redirect-location プロパティを追加します。Amazon S3 コンソールで、オブジェクトのメタデータ内のウェブサイトのリダイレクト場所を設定できます。Amazon S3 API を使用する場合は、x-amz-website-redirect-location を設定します。ウェブサイトは 301 リダイレクトとしてオブジェクトを解釈します。

リクエストを別のオブジェクトにリダイレクトするには、リダイレクト場所をターゲットオブジェクトのキーに設定します。リクエストを外部 URL にリダイレクトするには、リダイレクト場所を目的の URL に設定します。オブジェクトメタデータの詳細については、システムで定義されたオブジェクトメタデータ を参照してください。

ページリダイレクトを設定するときに、ソースオブジェクトコンテンツを維持することも、削除することもできます。たとえば、バケットに page1.html オブジェクトがある場合、このページのリクエストを別のオブジェクト page2.html にリダイレクトできます。これには2つのオプションがあります。

  • page1.html オブジェクトのコンテンツを維持して、ページリクエストをリダイレクトします。

  • page1.html のコンテンツを削除し、page1.html という名前の 0 バイトのオブジェクトをアップロードして、既存のオブジェクトを置き換え、ページリクエストをリダイレクトします。

オブジェクトのリクエストをリダイレクトするには

  1. Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. 静的ウェブサイトとして設定されたバケットの名前を選択します (例: example.com)。

  3. バケットの概要タブで、リダイレクトを作成するオブジェクトを選択します。

  4. [プロパティ] を選択します。

  5. [メタデータ] を選択します。

  6. [+ Add Metadata (+ メタデータの追加)] を選択します。

  7. [キー]で、[Website-Redirect-Location (ウェブサイト - リダイレクト - 場所)] を選択します。

  8. [] に、リダイレクト先のオブジェクトのキー名を入力します (例: /page2.html)。

    同じバケット内の別のオブジェクトでは、値の / プレフィックスが必要です。値を外部 URL に設定することもできます (例: http://www.example.com)。

  9. [Save] を選択します。

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-locationpage1.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 バケットにリダイレクトするように設定します。詳細については、「カスタムドメイン名を使用して静的ウェブサイトを設定する」を参照してください。

バケットウェブサイトエンドポイントにリクエストをリダイレクトするには

  1. Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. 静的ウェブサイトとして設定されたバケットの名前を選択します (例: example.com)。

  3. [プロパティ] を選択します。

  4. [静的ウェブサイトホスティング] を選択します。

  5. [リクエストをリダイレクトする] を選択します。

  6. [ターゲットバケットまたはドメイン] ボックスに、リダイレクト先のバケットまたはドメインを入力します。

    たとえば、ルートドメインアドレスにリダイレクトする場合は、「example.com」と入力します。

  7. [プロトコル] ボックスに、リクエストをリダイレクトするためのプロトコル (http または https) を入力します。

    プロトコルを指定しないと、元のリクエストのプロトコルが使用されます。

  8. [Save] を選択します。

高度な条件付きリダイレクトの設定

高度な条件付きリダイレクトルールを使用すると、条件に応じてリクエストのルーティング先を変えることができます。この条件として使用できるのは、特定のオブジェクトキー名、リクエストの中のプレフィックス、またはレスポンスコードです。たとえば、バケット内のあるオブジェクトを削除する、または名前を変更する場合は、リクエストを別のオブジェクトにリダイレクトするルーティングルールを追加します。フォルダを使用できなくする場合は、ルーティングルールを追加して別のウェブページにリクエストをリダイレクトできます。ルーティングルールは、エラー状態を処理するために追加することもできます。その場合は、エラーの処理時に、エラーを発生させたリクエストを別のドメインにリダイレクトします。

バケットをウェブサイトホスティング用に設定する場合、高度なリダイレクトルールを指定できます。Amazon S3 では、ウェブサイトごとに設定できるルーティングルールが 50 に制限されています。50 を超えるルーティングルールが必要な場合は、オブジェクトリダイレクトを使用できます。詳細については、「(オプション) ウェブページリダイレクトの設定」を参照してください。

静的ウェブサイトのリダイレクトルールを設定するには

静的ウェブサイトホスティングがすでに有効になっているバケットのリダイレクトルールを追加するには、次の手順に従います。

  1. Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. [バケット] リストで、静的ウェブサイトとして設定したバケットの名前を選択します。

  3. [プロパティ] を選択します。

  4. [静的ウェブサイトホスティング] を選択します。

  5. [リダイレクトルール] に、リダイレクトルールを入力します。

    ルールは XML を使用して記述します。リダイレクトルールを指定する一般的な構文と例については、「ルーティングルールを指定するための構文」を参照してください。Amazon S3 には、ウェブサイト設定ごとにルーティングルールが 50 に制限されています。50 を超えるルーティングルールが必要な場合は、オブジェクトリダイレクトを使用できます。詳細については、「Amazon S3 コンソールでのページリダイレクトの設定」を参照してください。

  6. [Save] を選択します。

ルーティングルールを指定するための構文

ウェブサイト設定でルーティングルールを定義するための一般的な構文を次に示します。

<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

条件とリダイレクトを明示したルール。この条件が満たされたときにこのリダイレクトが適用されます。

条件:

  • RoutingRules コンテナには、少なくとも 1 つのルーティングルールを含める必要があります。

Condition

条件を記述するためのコンテナ。この条件が満たされているときに、指定されたリダイレクトが適用されます。ルーティングルールの中に条件がない場合は、そのルールはすべてのリクエストに適用されます。

KeyPrefixEquals

リクエストをリダイレクトするオブジェクトキー名のプレフィックス。

KeyPrefixEquals HttpErrorCodeReturnedEquals が指定されていない場合は、 は必須です。KeyPrefixEqualsHttpErrorCodeReturnedEquals の両方が指定されている場合は、両方が真である場合に、条件が満たされていると見なされます。

HttpErrorCodeReturnedEquals

この HTTP エラーコードに一致している場合にのみ、リダイレクトが適用されます。エラーが発生した場合、エラーコードがこの値に等しい場合は、指定されたリダイレクトが適用されます。

HttpErrorCodeReturnedEquals KeyPrefixEquals が指定されていない場合は、 は必須です。KeyPrefixEqualsHttpErrorCodeReturnedEquals の両方が指定されている場合は、両方が真である場合に、条件が満たされていると見なされます。

Redirect

コンテナ要素。リクエストのリダイレクトに関する指示を表すのに使用されます。リクエストを別のホストや別のページにリダイレクトすることも、別のプロトコルの使用を指定することもできます。RoutingRule には Redirect 要素が必要です。1 つの Redirect 要素の中に、ProtocolHostNameReplaceKeyPrefixWithReplaceKeyWithHttpRedirectCode の兄弟要素のうち 1 つ以上が存在する必要があります。

Protocol

レスポンスとして返される Location ヘッダーで使用されるプロトコル(http または https)。

同レベルの要素の 1 つが指定されている場合、Protocol は省略可能です。

HostName

レスポンスとして返される Location ヘッダーで使用されるホスト名。

同レベルの要素の 1 つが指定されている場合、HostName は省略可能です。

ReplaceKeyPrefixWith

リダイレクトリクエストの中の KeyPrefixEquals の値を置き換えるオブジェクトキー名のプレフィックス。

同レベルの要素の 1 つが指定されている場合、ReplaceKeyPrefixWith は省略可能です。これを指定できるのは、ReplaceKeyWith が指定されていない場合のみです。

ReplaceKeyWith

レスポンスとして返される Location ヘッダーで使用されるオブジェクトキー。

同レベルの要素の 1 つが指定されている場合、ReplaceKeyWith は省略可能です。これを指定できるのは、ReplaceKeyPrefixWith が指定されていない場合のみです。

HttpRedirectCode

レスポンスとして返される Location ヘッダーで使用される HTTP リダイレクトコード。

同レベルの要素の 1 つが指定されている場合、HttpRedirectCode は省略可能です。

次の例では、一般的なリダイレクトタスクについて説明します。

例 1: キープレフィックスの名前を変更した後にリダイレクトする

バケットに次のオブジェクトが含まれているとします。

  • index.html

  • docs/article1.html

  • docs/article2.html

フォルダ名を docs/ から documents/ に変更することにしました。この変更を行った後は、プレフィックス docs/ に対するリクエストを documents/ にリダイレクトする必要があります。たとえば、docs/article1.html に対するリクエストを documents/article1.html にリダイレクトします。

この場合、次のルーティングルールをウェブサイト設定に追加します。

<RoutingRules> <RoutingRule> <Condition> <KeyPrefixEquals>docs/</KeyPrefixEquals> </Condition> <Redirect> <ReplaceKeyPrefixWith>documents/</ReplaceKeyPrefixWith> </Redirect> </RoutingRule> </RoutingRules>

例 2: 削除されたフォルダに対するリクエストをページにリダイレクトする

images/フォルダ (つまり、キープレフィックスが images/ のすべてのオブジェクト) を削除するとします。ルーティングルールを追加し、その中で、キープレフィックス images/ を持つオブジェクトに対するリクエストをすべて folderdeleted.html というページにリダイレクトするように設定します。

<RoutingRules> <RoutingRule> <Condition> <KeyPrefixEquals>images/</KeyPrefixEquals> </Condition> <Redirect> <ReplaceKeyWith>folderdeleted.html</ReplaceKeyWith> </Redirect> </RoutingRule> </RoutingRules>

例 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 が発生したときは、設定内で指定されているエラードキュメントが返されます。

<RoutingRules> <RoutingRule> <Condition> <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals > </Condition> <Redirect> <HostName>ec2-11-22-333-44.compute-1.amazonaws.com</HostName> <ReplaceKeyPrefixWith>report-404/</ReplaceKeyPrefixWith> </Redirect> </RoutingRule> </RoutingRules>