バケットを静的 Web サイトホスティングモードに設定し、ルーティングルールを設定します。

Web サイト

Web サイトインターフェイスには、次の 2 つの機能があります。

  • デフォルトのホームページとデフォルトの 404 ページを設定します。
  • RoutingRule を設定します。 RoutingRule には、3xx ルーティングルールとミラーリング back-to-origin ルールを指定します。
    ミラーリング back-to-origin は、Alibaba Cloud と Finance Cloud でサポートされています。

次の例は、Web サイトのフィールドを示します。

<WebsiteConfiguration>
  <IndexDocument>
    <Suffix>index.html</Suffix>
  </IndexDocument>
  <ErrorDocument>
    <Key>error.html</Key>
  </ErrorDocument>
  <RoutingRules>
    <RoutingRule>
      <RuleNumber>1</RuleNumber>
      <Condition>
        <KeyPrefixEquals>abc/</KeyPrefixEquals>
        <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
      </Condition>
      <Redirect>
        <RedirectType>Mirror</RedirectType>
        <PassQueryString>true</PassQueryString>
        <MirrorURL>http://www.test.com/</MirrorURL>
        <MirrorPassQueryString>true</MirrorPassQueryString>
        <MirrorFollowRedirect>true</MirrorFollowRedirect>
        <MirrorCheckMd5>false</MirrorCheckMd5>
        <MirrorHeaders>
          <PassAll>true</PassAll>
          <Pass>myheader-key1</Pass>
          <Pass>myheader-key2</Pass>
          <Remove>myheader-key3</Remove>
          <Remove>myheader-key4</Remove>
          <Set>
            <Key>myheader-key5</Key>
            <Value>myheader-value5</Value>
          </Set>
        </MirrorHeaders>
      </Redirect>
    </RoutingRule>
    <RoutingRule>
      <RuleNumber>2</RuleNumber>
      <Condition>
        <KeyPrefixEquals>abc/</KeyPrefixEquals>
        <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
        <IncludeHeader>
          <Key>host</Key>
          <Equals>test.oss-cn-beijing-internal.aliyuncs.com</Equals>
        </IncludeHeader>
      </Condition>
      <Redirect>
        <RedirectType>AliCDN</RedirectType>
        <Protocol>http</Protocol>
        <HostName>www.test.com</HostName>
        <PassQueryString>false</PassQueryString>
        <ReplaceKeyWith>prefix/${key}.suffix</ReplaceKeyWith>
        <HttpRedirectCode>301</HttpRedirectCode>
      </Redirect>
    </RoutingRule>
  </RoutingRules>
</WebsiteConfiguration>

リクエスト構文

PUT /? website HTTP/1.1
Date: GMT Date
Content-Length:ContentLength
Content-Type: application/xml
Host: BucketName.oss-cn-hangzhou.aliyuncs.com
Authorization: SignatureValue

<? xml version="1.0" encoding="UTF-8"? >
<WebsiteConfiguration>
    <IndexDocument>
        <Suffix>index.html</Suffix>
    </IndexDocument>
    <ErrorDocument>
        <Key>errorDocument.html</Key>
    </ErrorDocument>
</WebsiteConfiguration>

リクエスト要素

要素 説明 必須
WebsiteConfiguration Container

ルートノード

親要素:なし

はい
IndexDocument Container

デフォルトのホームページのコンテナーを指定します。

親要素:WebsiteConfiguration

条件付き必須。 IndexDocument、ErrorDocument、RoutingRules のうち、1 つ以上のコンテナーを指定する必要があります。
Suffix String

デフォルトのホームページを指定します。

この要素が設定されている場合、名前の末尾がスラッシュ (/) のオブジェクトへのアクセスは、デフォルトのホームページにリダイレクトされます。

親要素:IndexDocument

条件付き必須。 この要素は、親要素 IndexDocument が指定されている場合、指定する必要があります。
ErrorDocument Container

404 ページのコンテナーを指定します。

親要素:WebsiteConfiguration

条件付き必須。 IndexDocument、ErrorDocument、RoutingRules のうち、1 つ以上のコンテナーを指定する必要があります。
Key Container

404 ページ

この要素を指定すると、存在しないオブジェクトへのアクセスは 404 ページにリダイレクトされます。

親要素:ErrorDocument

条件付き必須。 この要素は、親要素 ErrorDocument が指定されている場合、指定する必要があります。
RoutingRules Container

RoutingRule のコンテナーを指定します。

親要素:WebsiteConfiguration

条件付き必須。 IndexDocument、ErrorDocument、RoutingRules のうち、1 つ以上のコンテナーを指定する必要があります。
RoutingRule Container

ルーティングルールまたはミラーリング back-to-origin ルールを指定します。 最大 5 つの RoutingRule を指定できます。

親要素:RoutingRules

いいえ
RuleNumber 正の整数

ルーティングルールの照合と実行に使用されるシーケンス番号を指定します。 ルーティングルールは、シーケンス番号に従って照合されます。 ルーティングルールが番号と一致する場合、そのルールが実行され、以降のルールは実行されません。

親要素:RoutingRule

条件付き必須。 この要素は、親要素 RoutingRule が指定されている場合、指定する必要があります。
Condition Container

一致条件を指定します。

ルーティングルールがすべての条件を満たしている場合、そのルールが実行されます。 バケット内の要素は AND の関係にあります。したがって、ルーティングルールが一致すると見なされるには、すべての条件を満たす必要があります。

親要素:RoutingRule

条件付き必須。 この要素は、親要素 RoutingRule が指定されている場合、指定する必要があります。
KeyPrefixEquals String

プレフィックスに一致するオブジェクトのみが、ルールに一致することを示します。

親要素:Condition

いいえ
HttpErrorCodeReturnedEquals HTTP status code

オブジェクトへのアクセス時、指定したステータスコードが返された場合のみ、ルールが一致することを示します。 ルーティングルールがミラーリング back-to-source ルールの場合、このステータスコードは 404 である必要があります。

親要素:Condition

いいえ
IncludeHeader Container

指定されたヘッダーがリクエストに含まれ、ヘッダー値が指定された値と等しい場合のみ、ルーティングルールは一致することを示します。 同じコンテナーに最大 5 つ指定できます。

親要素:Condition

いいえ
Key String

このヘッダーがリクエストに含まれ、ヘッダー値が Equals で指定された値と等しい場合のみ、ルールが一致することを示します。

親要素:IncludeHeader

条件付き必須。 この要素は、親要素 IncludeHeader が指定されている場合、指定する必要があります。
Equals String

Key で指定されたヘッダーがリクエストに含まれ、ヘッダー値が指定された値と等しい場合のみ、ルールが一致することを示します。

親要素:IncludeHeader

条件付き必須。 この要素は、親要素 IncludeHeader が指定されている場合、指定する必要があります。
Redirect Container

ルールが一致した後に実行するアクションを指定します。

親要素:RoutingRule

条件付き必須。 この要素は、親要素 RoutingRule が指定されている場合、指定する必要があります。
RedirectType String

リダイレクトタイプを指定します。次の値を指定できます。

  • Mirror (ミラーリング back-to-origin)
  • External (外部リダイレクト。OSS は他の IP アドレスにアクセスがリダイレクトされる 3xx リクエストを返します)
  • Internal (内部リダイレクト。ルールに基づき、アクセスは object1 から object2 にリダイレクトされます。 この場合、object1 ではなく、object2 にアクセスします。
  • AliCDN (AliCDN リダイレクト。AliCDN の場合に使用されます。 External タイプとは異なり、リクエストに追加のヘッダーが追加されます。 ヘッダーを識別した後、AliCDN は指定された IP アドレスにアクセスをリダイレクトし、3xx リダイレクトリクエストではなく、取得したデータを返します。

親要素:Redirect

条件付き必須。 この要素は、親要素 Redirect が指定されている場合、指定する必要があります。
PassQueryString Bool

リダイレクトまたはミラーリング back-to-origin の実行時に、リクエストパラメーターを含めるかどうかを示します。 この要素に指定できる値は、true または false です。

たとえば、パラメーター "?a=b&c=d" が OSS へのリクエストに含まれていて、この要素が true に設定されていると、ルールが 302 リダイレクトの場合、このパラメーターは Location ヘッダーに追加されます。 たとえば、リクエストが "Location:www.test.com? a=b&c=d" で、リダイレクトタイプがミラーリング back-to-origin の場合、パラメーターは back-to-origin リクエストにも含まれます。

デフォルト値:false

親要素:Redirect

いいえ
MirrorURL String

ミラーリング back-to-origin 内のオリジンサイトの IP アドレスを示します。 この要素は、RedirectType の値が Mirror の場合のみ有効になります。

MirrorURL が http:// または s:// で始まる場合、末尾をスラッシュ (/) にする必要があります。 OSS は、ターゲットオブジェクトを MirrorURL に追加して、back-to-origin URL を作成します。 たとえば、MirrorURL が http://www.test.com/ に設定され、アクセスするオブジェクトが "myobject" の場合、back-to-origin URL は http://www.test.com/dir1/myobject です。 MirrorURL が http://www.test.com/dir1/ に設定されている場合、back-to-origin URL は http://www.test.com/dir1/myobject です。

親要素:Redirect

条件付き必須。 RedirectType が Mirror の場合、この要素を指定する必要があります。
MirrorPassQueryString Bool

この要素は PassQueryString と同じ役割がありますが、優先順位は PassQueryString よりも高いです。 ただし、この要素は、RedirectType が Mirror の場合のみ、有効になります。

デフォルト値:false

親要素:Redirect

いいえ
MirrorFollowRedirect Bool

オリジンサイトが back-to-origin リクエストを受信したときに 3xx ステータスコードを返した場合、指定された Location にアクセスがリダイレクトされるかどうかを示します。

たとえば、オリジン サイトがミラーリング back-to-origin リクエストを受信したときに 302 ステータスコードを返し、Location が指定されているとします。 この場合、MirrorFollowRedirect の値が true の場合、Location で指定された IP アドレスにリクエストは引き続き送信されます。 (リクエストは最大10 回までリダイレクトできます。 リクエストが 10 回を超えてリダイレクトされると、ミラーリング back-to-origin エラーメッセージが返されます)。 MirrorFollowRedirect の値が false の場合、OSS は 302 ステータスコードを返し、Location に渡します。 この要素は、RedirectType の値が Mirror の場合のみ有効になります。

デフォルト値:true

親要素:Redirect

いいえ
MirrorCheckMd5 Bool

オリジンサイトから返されるレスポンス本文に対して、OSS で MD5 チェックを実行するかどうかを示します。

この要素の値が true で、オリジンサイトから返されるレスポンスに Content-Md5 ヘッダーが含まれている場合、取得したデータの MD5 チェックサムがヘッダーと一致するかどうかがチェックされます。 一致しない場合、データは保存されません。 この要素は、RedirectType の値が Mirror の場合のみ有効になります。

デフォルト値:false

親要素:Redirect
いいえ
MirrorHeaders Container

オリジンサイトから返されるレスポンスに含まれるヘッダーを指定します。 この要素は、RedirectType の値が Mirror の場合のみ有効になります。

親要素:Redirect

いいえ
PassAll Bool

OSS がすべてのヘッダー (予約済みヘッダーと、oss-/x-oss-/x-drs で始まるヘッダーを除く) をオリジン サイトに渡すかどうかを示します。 この要素は、RedirectType の値が Mirror の場合のみ有効になります。

デフォルト値:false

親要素:MirrorHeaders

いいえ
Pass String

オリジン サイトに渡されるヘッダーを指定します。 最大 10 個のヘッダーを指定できます。 ヘッダーの最大長は、1,024 バイトです。 この要素の文字セットは、0 から 9、A から Z、a から z、およびダッシュです。 この要素は、RedirectType の値が Mirror の場合のみ有効になります。

親要素:MirrorHeaders

いいえ
Remove String

オリジン サイトに渡すことができないヘッダーを指定します。 最大 10 個のヘッダーを指定できます (重複するヘッダーを含む)。 この要素は PassAll と共に使用されます。 ヘッダーの最大長は、1,024 バイトです。 この要素の文字セットは、Pass の文字セットと同じです。 この要素は、RedirectType の値が Mirror の場合のみ有効になります。

親要素:MirrorHeaders

いいえ
Set Container

オリジン サイトに送信されるヘッダーを指定します。 指定されたヘッダーは、リクエストに含まれているかどうかにかかわらず、オリジンサイトから返されるデータに設定されます。 最大 10 グループのヘッダーを設定できます (重複するヘッダーを含む)。 この要素は、RedirectType の値が Mirror の場合のみ有効になります。

親要素:MirrorHeaders

いいえ
Key String

ヘッダーのキーを指定します。 キーの最大長は、1,024 バイトです。 この要素の文字セットは、Pass の文字セットと同じです。 この要素は、RedirectType の値が Mirror の場合のみ有効になります。

親要素:Set

条件付き必須。 この要素は、親要素 Set が指定されている場合、指定する必要があります。
Value String

ヘッダーの値を指定します。 値の最大長は、1,024 バイトです。 要素に "\r\n" という文字は使用できません。 この要素は、RedirectType の値が Mirror の場合のみ有効になります。

親要素:Set

条件付き必須。 この要素は、親要素 Set が指定されている場合、指定する必要があります。
Protocol String

リダイレクトに使用するプロトコルを示します。 この要素に指定できる値は、http または https です。 たとえば、リクエストされたオブジェクトは test、リクエストのリダイレクト先は www.test.com、Protocol の値は https の場合、 Location ヘッダーは https://www.test.com/test です。 この要素は、RedirectType の値が External または AliCDN の場合のみ有効になります。

親要素:Redirect

条件付き必須。 この要素は、RedirectType の値が External または AliCDN の場合、指定する必要があります。
HostName String

リダイレクトに使用するドメイン名を示します。ドメイン名の仕様に準拠する必要があります。 たとえば、リクエストされたオブジェクトは test、Protocol の値は https、Hostname は www.test.com に指定されている場合、Location ヘッダーは https://www.test.com/test です。 この要素は、RedirectType の値が External または AliCDN の場合のみ有効になります。

親要素:Redirect

条件付き必須。 この要素は、RedirectType の値が External または AliCDN の場合、指定する必要があります。
HttpRedirectCode HTTP status code

リダイレクトで返されるステータスコードを示します。 この要素に指定できる値は、301、302、307 です。 この要素は、RedirectType の値が External または AliCDN の場合のみ有効になります。

親要素:Redirect

条件付き必須。 この要素は、RedirectType の値が External または AliCDN の場合、指定する必要があります。
ReplaceKeyPrefixWith String

リダイレクトでリクエストされたオブジェクト名のプレフィックスを置き換える文字列を示します。 オブジェクト名のプレフィックスが空の場合、この文字列はオブジェクト名の前に追加されます。 ReplaceKeyWith 要素と ReplaceKeyPrefixWith 要素を同時に設定することはできません。

たとえば、KeyPrefixEquals が abc/ に設定され、ReplaceKeyPrefixWith が def/ に設定されている場合、オブジェクト名 abc/test.txt の Location ヘッダーは http://www.test.com/def/test.txt です。 この要素は、RedirectType の値が External または AliCDN の場合のみ有効になります。

親要素:Redirect

条件付き必須。 この要素は、RedirectType の値が Internal、External、または AliCDN の場合に指定する必要があります。
ReplaceKeyWith String

リダイレクトでリクエストされたオブジェクト名を置き換える文字列を示します。 この要素は、変数にすることができます。 (リクエスト内のオブジェクト名を示す変数 ${key} がサポートされています。) ReplaceKeyWith 要素と ReplaceKeyPrefixWith 要素を同時に設定することはできません。

たとえば、ReplaceKeyWith が prefix/${key}.suffix に設定されている場合、オブジェクト名 test の Location ヘッダーは http://www.test.com/prefix/test.suffix です。 この要素は、RedirectType の値が External または AliCDN の場合のみ有効になります。

親要素:Redirect

条件付き必須。 この要素は、RedirectType の値が Internal、External、または AliCDN の場合に指定する必要があります。

詳細分析

  • 静的 Web サイトとは、すべての Web ページが静的コンテンツで構成されている Web サイトです。たとえば、クライアントで実行される JavaScript などのスクリプトがあります。 OSS では、PHP、JSP、APS.NET など、サーバーで処理する必要があるコンテンツはサポートされていません。
  • 独自のドメイン名を使用してバケットベースの静的 Web サイトにアクセスするには、CNAME を使用します。 設定方法の詳細は、「カスタムドメイン名のバインド」をご参照ください。
  • バケットを静的 Web サイトホスティングモードに設定するには、インデックスページを指定する必要があります。エラー ページは省略可能です。
  • バケットを静的 Web サイトホスティング モードに設定するには、指定されたインデックスページとエラーページをバケット内のオブジェクトにします。
  • バケットを静的 Web サイトホスティングモードに設定した場合、静的 Web サイトのルートドメイン名に対する匿名アクセスの場合はインデックスページが返され、静的 Web サイトのルートドメイン名に対する署名付きアクセスの場合は Get Bucket の結果が返されます。
  • Content-MD5 リクエストヘッダーをアップロードすると、本文の Content-MD5 が計算され、2 つの値が同じかどうかがチェックされます。 2 つの値が異なる場合、エラーコード InvalidDigest が返されます。

リクエスト例

PUT /? website HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Content-Length: 209
Date: Fri, 04 May 2012 03:21:12 GMT
Authorization: OSS qn6qrrqx******k53otfjbyc:KU5h8YM******0dXqf3JxrTZHiA=

<? xml version="1.0" encoding="UTF-8"? >
<WebsiteConfiguration>
<IndexDocument>
<Suffix>index.html</Suffix>
</IndexDocument>
<ErrorDocument>
<Key>error.html</Key>
</ErrorDocument>
</WebsiteConfiguration>

レスポンス例

HTTP/1.1 200 OK
x-oss-request-id: 534B371674E88A4D8906008B
Date: Fri, 04 May 2012 03:21:12 GMT
Content-Length: 0
Connection: keep-alive
Server: AliyunOSS

完全なコード

PUT /? website HTTP/1.1
Date: Fri, 27 Jul 2018 09:03:18 GMT
Content-Length: 2064
Host: test.oss-cn-hangzhou-internal.aliyuncs.com
Authorization: OSS a1nBN******QMf8u:sNKIHT6ci/z231yIT5vYnetDLu4=
User-Agent: aliyun-sdk-python-test/0.4.0

<WebsiteConfiguration>
<IndexDocument>
<Suffix>index.html</Suffix>
</IndexDocument>
<ErrorDocument>
<Key>error.html</Key>
</ErrorDocument>
<RoutingRules>
<RoutingRule>
<RuleNumber>1</RuleNumber>
<Condition>
<KeyPrefixEquals>abc/</KeyPrefixEquals>
<HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
</Condition>
<Redirect>
<RedirectType>Mirror</RedirectType>
<PassQueryString>true</PassQueryString>
<MirrorURL>http://www.test.com/</MirrorURL>
<MirrorPassQueryString>true</MirrorPassQueryString>
<MirrorFollowRedirect>true</MirrorFollowRedirect>
<MirrorCheckMd5>false</MirrorCheckMd5>
<MirrorHeaders>
<PassAll>true</PassAll>
<Pass>myheader-key1</Pass>
<Pass>myheader-key2</Pass>
<Remove>myheader-key3</Remove>
<Remove>myheader-key4</Remove>
<Set>
<Key>myheader-key5</Key>
<Value>myheader-value5</Value>
</Set>
</MirrorHeaders>
</Redirect>
</RoutingRule>
<RoutingRule>
<RuleNumber>2</RuleNumber>
<Condition>
<KeyPrefixEquals>abc/</KeyPrefixEquals>
<HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
<IncludeHeader>
<Key>host</Key>
<Equals>test.oss-cn-beijing-internal.aliyuncs.com</Equals>
</IncludeHeader>
</Condition>
<Redirect>
<RedirectType>AliCDN</RedirectType>
<Protocol>http</Protocol>
<HostName>www.test.com</HostName>
<PassQueryString>false</PassQueryString>
<ReplaceKeyWith>prefix/${key}.suffix</ReplaceKeyWith>
<HttpRedirectCode>301</HttpRedirectCode>
</Redirect>
</RoutingRule>
</RoutingRules>
</WebsiteConfiguration>

HTTP/1.1 200 OK
Server: AliyunOSS
Date: Fri, 27 Jul 2018 09:03:18 GMT
Content-Length: 0
Connection: keep-alive
x-oss-request-id: 5B5ADFD6ED3CC49176CBE29D
x-oss-server-time: 47