

# (オプション) ウェブページリダイレクトの設定
<a name="how-to-page-redirect"></a>

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

**Topics**
+ [バケットのウェブサイトエンドポイントに対するリクエストを別のバケットまたはドメインにリダイレクトする](#redirect-endpoint-host)
+ [高度な条件付きリダイレクトを使用するようにリダイレクトルールを設定する](#advanced-conditional-redirects)
+ [オブジェクトのリクエストをリダイレクトする](#redirect-requests-object-metadata)

## バケットのウェブサイトエンドポイントに対するリクエストを別のバケットまたはドメインにリダイレクトする
<a name="redirect-endpoint-host"></a>

バケットのウェブサイトエンドポイントに対するすべてのリクエストを、別のバケットまたはドメインにリダイレクトできます。すべてのリクエストをリダイレクトする場合、ウェブサイトエンドポイントに対して行われたすべてのリクエストが指定されたバケットまたはドメインにリダイレクトされます。

例えば、ルートドメインが `example.com` であり、`http://example.com` および `http://www.example.com` の両方のためのリクエストに対応する場合は、`example.com` および `www.example.com` という 2 つのバケットを作成する必要があります。次に、`example.com` バケット内のコンテンツを保持し、他の `www.example.com` バケットからすべてのリクエストを `example.com` バケットにリダイレクトするように設定します。詳細については、「[カスタムドメイン名を使用して静的ウェブサイトを設定する](https://docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html)」を参照してください。

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

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

1. [**Buckets (バケット)**] で、リクエストをリダイレクトするバケットの名前 (`www.example.com` など)を選択します。

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

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

1. [**Redirect requests for an object (オブジェクトのリクエストをリダイレクト)**] を選択します。

1. [**Host name (ホスト名)**] ボックスに、バケットまたはカスタムドメインのウェブサイトエンドポイントを入力します。

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

1. [**Protocol (プロトコル)**] で、リダイレクトされた要求のプロトコル ([**none**]、[**http**]、または [**https**]) を選択します。

   プロトコルを指定しない場合、デフォルトのオプションは [**none**] です。

1. [**Save changes**] (変更の保存) をクリックします。

## 高度な条件付きリダイレクトを使用するようにリダイレクトルールを設定する
<a name="advanced-conditional-redirects"></a>

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

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

REST API を使用したルーティングルールの設定の詳細については、*Amazon Simple Storage Service API リファレンス*の「[PutBucketWebsite](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketWebsite.html)」を参照してください。

**重要**  
新しい Amazon S3 コンソールでリダイレクトルールを作成するには、JSON を使用する必要があります。JSON の例については、「[リダイレクトルールの例](#redirect-rule-examples)」を参照してください。

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

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

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

1. 左のナビゲーションペインで、**[汎用バケット]** を選択します。

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

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

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

1. [**Redirection rules (リダイレクトルール)** ] ボックスに、JSON にリダイレクトルールを入力します。

   S3 コンソールでは、JSON を使用してルールを記述します。JSON の例については、「[リダイレクトルールの例](#redirect-rule-examples)」を参照してください。Amazon S3 では、ウェブサイト設定ごとのルーティングルールの数が 50 に制限されています。

1. [**Save changes**] (変更の保存) をクリックします。

### ルーティングルール要素
<a name="configure-bucket-as-website-routing-rule-syntax"></a>

JSON および XML でウェブサイト設定のルーティングルールを定義するための一般的な構文を次に示します。新しい S3 コンソールでリダイレクトルールを設定するには、JSON を使用する必要があります。JSON の例については、「[リダイレクトルールの例](#redirect-rule-examples)」を参照してください。

------
#### [ JSON ]

```
[
    {
      "Condition": {
        "HttpErrorCodeReturnedEquals": "string",
        "KeyPrefixEquals": "string"
      },
      "Redirect": {
        "HostName": "string",
        "HttpRedirectCode": "string",
        "Protocol": "http"|"https",
        "ReplaceKeyPrefixWith": "string",
        "ReplaceKeyWith": "string"
      }
    }
  ]
 
Note: Redirect must each have at least one child element. You can have either ReplaceKeyPrefix with or ReplaceKeyWith but not both.
```

------
#### [ XML ]

```
<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. You can have either ReplaceKeyPrefix with or ReplaceKeyWith but not both.
```

------

次の表は、ルーティングルールの要素をまとめたものです。


|  名前  |  説明  | 
| --- | --- | 
| RoutingRules |  RoutingRule 要素のコレクションを入れるコンテナ。 | 
| RoutingRule |  条件とリダイレクトを明示したルール。この条件が満たされたときにこのリダイレクトが適用されます。 条件: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/how-to-page-redirect.html)  | 
| Condition |  条件を記述するためのコンテナ。この条件が満たされているときに、指定されたリダイレクトが適用されます。ルーティングルールの中に条件がない場合は、そのルールはすべてのリクエストに適用されます。  | 
| KeyPrefixEquals |  リクエストをリダイレクトするオブジェクトキー名のプレフィックス。 `KeyPrefixEquals` `HttpErrorCodeReturnedEquals` が指定されていない場合は、 は必須です。`KeyPrefixEquals` と `HttpErrorCodeReturnedEquals` の両方が指定されている場合は、両方が真である場合に、条件が満たされていると見なされます。  | 
| HttpErrorCodeReturnedEquals |  この HTTP エラーコードに一致している場合にのみ、リダイレクトが適用されます。エラーが発生した場合、エラーコードがこの値に等しい場合は、指定されたリダイレクトが適用されます。 `HttpErrorCodeReturnedEquals` `KeyPrefixEquals` が指定されていない場合は、 は必須です。`KeyPrefixEquals` と `HttpErrorCodeReturnedEquals` の両方が指定されている場合は、両方が真である場合に、条件が満たされていると見なされます。  | 
| Redirect |  コンテナ要素。リクエストのリダイレクトに関する指示を表すのに使用されます。リクエストを別のホストや別のページにリダイレクトすることも、別のプロトコルの使用を指定することもできます。`RoutingRule` には `Redirect` 要素が必要です。1 つの `Redirect` 要素の中に、`Protocol`、`HostName`、`ReplaceKeyPrefixWith`、`ReplaceKeyWith`、`HttpRedirectCode` の兄弟要素のうち 1 つ以上が存在する必要があります。  | 
| Protocol |  レスポンスとして返される `http` ヘッダーで使用されるプロトコル（`https` または `Location`）。 同レベルの要素の 1 つが指定されている場合、`Protocol` は省略可能です。  | 
| HostName |  レスポンスとして返される `Location` ヘッダーで使用されるホスト名。 同レベルの要素の 1 つが指定されている場合、`HostName` は省略可能です。  | 
| ReplaceKeyPrefixWith |  リダイレクトリクエストの中の `KeyPrefixEquals` の値を置き換えるオブジェクトキー名のプレフィックス。 同レベルの要素の 1 つが指定されている場合、`ReplaceKeyPrefixWith` は省略可能です。これを指定できるのは、`ReplaceKeyWith` が指定されていない場合のみです。  | 
| ReplaceKeyWith |  レスポンスとして返される `Location` ヘッダーで使用されるオブジェクトキー。 同レベルの要素の 1 つが指定されている場合、`ReplaceKeyWith` は省略可能です。これを指定できるのは、`ReplaceKeyPrefixWith` が指定されていない場合のみです。  | 
| HttpRedirectCode |  レスポンスとして返される `Location` ヘッダーで使用される HTTP リダイレクトコード。 同レベルの要素の 1 つが指定されている場合、`HttpRedirectCode` は省略可能です。  | 

#### リダイレクトルールの例
<a name="redirect-rule-examples"></a>

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

**重要**  
新しい Amazon S3 コンソールでリダイレクトルールを作成するには、JSON を使用する必要があります。

**Example 1: キープレフィックスの名前を変更した後にリダイレクトする**  
バケットに次のオブジェクトが含まれているとします。  
+ index.html
+ docs/article1.html
+ docs/article2.html
フォルダ名を `docs/` から `documents/` に変更することにしました。この変更を行った後は、プレフィックス `docs/` に対するリクエストを `documents/` にリダイレクトする必要があります。たとえば、`docs/article1.html` に対するリクエストを `documents/article1.html` にリダイレクトします。  
この場合、次のルーティングルールをウェブサイト設定に追加します。  

```
[
    {
        "Condition": {
            "KeyPrefixEquals": "docs/"
        },
        "Redirect": {
            "ReplaceKeyPrefixWith": "documents/"
        }
    }
]
```

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

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

```
[
    {
        "Condition": {
            "KeyPrefixEquals": "images/"
        },
        "Redirect": {
            "ReplaceKeyWith": "folderdeleted.html"
        }
    }
]
```

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

**Example 3: 特定のパスがある別のドメインにリダイレクトする**  
特定のパスのリクエストを別のドメインにリダイレクトするとします。例えば、`/redirect/me` のリクエストを `https://example.com/new/path` にリダイレクトします。  
`HostName` と `ReplaceKeyWith` の両方を同時に使用する場合、Amazon S3 はホスト名と置換キーをスラッシュで連結してリダイレクト URL を作成します。したがって、`ReplaceKeyWith` 値には先頭のスラッシュを含めないでください。Amazon S3 は、ホスト名と置換キーの間にスラッシュを自動的に追加します。  

```
[
    {
        "Condition": {
            "KeyPrefixEquals": "redirect/me"
        },
        "Redirect": {
            "HostName": "example.com",
            "ReplaceKeyWith": "new/path"
        }
    }
]
```

```
  <RoutingRules>
    <RoutingRule>
    <Condition>
      <KeyPrefixEquals>redirect/me</KeyPrefixEquals>
    </Condition>
    <Redirect>
      <HostName>example.com</HostName>
      <ReplaceKeyWith>new/path</ReplaceKeyWith>
    </Redirect>
    </RoutingRule>
  </RoutingRules>
```
この設定では、`https://yourbucket.s3-website-region.amazonaws.com/redirect/me` のリクエストを `https://example.com/new/path` にリダイレクトします。`ReplaceKeyWith` は、先頭のスラッシュなしで `new/path` に設定されます。

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

```
[
    {
        "Condition": {
            "HttpErrorCodeReturnedEquals": "404"
        },
        "Redirect": {
            "HostName": "ec2-11-22-333-44.compute-1.amazonaws.com",
            "ReplaceKeyPrefixWith": "report-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>
```

## オブジェクトのリクエストをリダイレクトする
<a name="redirect-requests-object-metadata"></a>

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

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

ページリダイレクトを設定するときに、ソースオブジェクトコンテンツを維持することも、削除することもできます。たとえば、バケットに `page1.html` オブジェクトがある場合、このページのリクエストを別のオブジェクト `page2.html` にリダイレクトできます。これには2つのオプションがあります。
+ `page1.html` オブジェクトのコンテンツを維持して、ページリクエストをリダイレクトします。
+ `page1.html` のコンテンツを削除し、`page1.html` という名前の 0 バイトのオブジェクトをアップロードして、既存のオブジェクトを置き換え、ページリクエストをリダイレクトします。

### S3 コンソールの使用
<a name="page-redirect-using-console"></a>

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

1. [**Buckets (バケット)**] リストで、静的ウェブサイトとして設定したバケットの名前を選択します (例: `example.com`)。

1. [**Objects (オブジェクト)**] でオブジェクトを選択します。

1. [**Actions (アクション)**] を選択し、[**Edit metadata (メタデータの編集)**] を選択します。

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

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

1. [**Type (タイプ)**] で、[**System Defined (システム定義)**] を選択します。

1. [**Key (キー)**]で、[**x-amz-website-redirect-location**] を選択します。

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

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

1. [**Edit metadata (メタデータの編集)**] を選択します。

### REST API の使用
<a name="page-redirect-using-rest-api"></a>

次の Amazon S3 API アクションは、リクエストの `x-amz-website-redirect-location` ヘッダーをサポートしています。Amazon S3 はオブジェクトメタデータのヘッダー値を `x-amz-website-redirect-location` として保存します。
+ [PUT Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html)
+ [Initiate Multipart Upload](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html)
+ [POST Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)
+ [PUT Object − Copy](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html)

ウェブサイトホスティング用に設定されたバケットには、ウェブサイトエンドポイントと REST エンドポイントの両方があります。リクエストされたページが 301 リダイレクトとして設定されている場合の結果は、リクエストのエンドポイントに応じて、次のようになると考えられます。
+ **リージョン固有のウェブサイトエンドポイント – ** Amazon S3 は、`x-amz-website-redirect-location` プロパティの値に従ってページリクエストをリダイレクトします。
+ **REST エンドポイント – ** Amazon S3 はページリクエストをリダイレクトしません。リクエストされたオブジェクトを返します。

エンドポイントの詳細については、「[ウェブサイトエンドポイントと REST API エンドポイントの主な違い](WebsiteEndpoints.md#WebsiteRestEndpointDiff)」を参照してください。

ページリダイレクトを設定する場合、オブジェクトのコンテンツを維持するか、削除できます。たとえば、バケットに `page1.html` というオブジェクトがあるとします。
+ `page1.html` のコンテンツを維持し、ページリクエストのリダイレクトのみを行う場合は、[PUT Object - Copy](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html) リクエストを送信して新しい `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](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html) アクションを使用して、他のオブジェクトメタデータと一緒にオブジェクトを取得すると、Amazon S3 はレスポンスで `x-amz-website-redirect-location` ヘッダーを返します。