バケットを静的 Web サイトホスティングモードに設定し、リダイレクトルールを設定します。
アップロード制限
静的 Web サイトとは、すべての Web ページが静的コンテンツのみで構成される Web サイトです。これには、クライアントで実行される JavaScript コードなどのスクリプトも含まれます。Object Storage Service (OSS) オブジェクトを静的ページとして指定する場合、静的ページには、PHP、JSP、ASP.NET コンテンツなど、サーバーによって処理される必要のあるコンテンツを含めることはできません。
oss:PutBucketWebsite
権限は、PutBucketWebsite を呼び出すことによって、静的 Web サイトホスティングモードを有効にし、リダイレクトルールを設定するために必要です。詳細については、「RAM ユーザーにカスタムポリシーをアタッチする」をご参照ください。機能
PutBucketWebsite 操作は、静的 Web サイトホスティングモードに設定されているバケットのデフォルトホームページ、デフォルト 404 ページ、および RoutingRule を設定するために使用されます。RoutingRule は、リダイレクトルールとミラーリングベースの原点復帰ルールを指定するために使用されます。ミラーリングベースの原点復帰は、Alibaba Cloud パブリッククラウドと金融クラウドをサポートしています。
カスタムドメイン名を使用したアクセス
カスタムドメイン名を使用してバケットベースの静的 Web サイトにアクセスするには、CNAME を使用できます。具体的な操作の詳細については、「カスタムドメイン名をマッピングする」をご参照ください。
インデックスページとエラーページ
バケットを静的 Web サイトホスティングモードに設定すると、静的 Web サイトのインデックスページとエラーページを指定できます。指定されたインデックスページとエラーページは、バケット内のオブジェクトである必要があります。
ルートドメイン名への匿名アクセス
バケットが静的 Web サイトホスティングモードに設定されると、OSS は静的 Web サイトのルートドメイン名への匿名アクセスに対してインデックスページを返します。署名付きリクエストが静的 Web サイトのルートドメイン名にアクセスするために送信された場合、OSS は GetBucket (ListObjects) 操作の結果を返します。
リクエスト構造
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>
<HttpStatus>404</HttpStatus>
</ErrorDocument>
</WebsiteConfiguration>
リクエストヘッダー
PutBucketWebsite リクエストには、共通のリクエストヘッダーのみが含まれています。詳細については、「共通リクエストヘッダー」をご参照ください。
リクエストパラメーター
次の表に、WebsiteConfiguration の要素を示します。
要素
タイプ
必須
説明
WebsiteConfiguration
コンテナー
はい
ルートノード。
親ノード: なし
次の表に、IndexDocument の要素を示します。
要素
タイプ
必須
説明
IndexDocument
コンテナー
条件付き
IndexDocument、ErrorDocument、RoutingRules のコンテナーのうち、少なくとも 1 つを指定する必要があります。
デフォルトホームページのコンテナー。
親ノード: WebsiteConfiguration
Suffix
文字列
条件付き
IndexDocument を指定する場合は、この要素を指定する必要があります。
デフォルトホームページ。
デフォルトホームページを指定すると、名前がスラッシュ (/) で終わるオブジェクトにアクセスした場合、OSS はデフォルトホームページを返します。
親ノード: IndexDocument
SupportSubDir
文字列
いいえ
サブディレクトリにアクセスしたときに、サブディレクトリのデフォルトホームページへのアクセスをリダイレクトするかどうかを指定します。デフォルト値: false。有効値:
true: アクセスはサブディレクトリのデフォルトホームページにリダイレクトされます。
false: アクセスは、サブディレクトリのデフォルトホームページではなく、ルートディレクトリのデフォルトホームページにリダイレクトされます。
例: デフォルトホームページが index.html に設定されており、
bucket.oss-cn-hangzhou.aliyuncs.com/subdir/
にアクセスする場合。SupportSubDir が false に設定されている場合、アクセスはbucket.oss-cn-hangzhou.aliyuncs.com/index.html
にリダイレクトされます。SupportSubDir が true に設定されている場合、アクセスはbucket.oss-cn-hangzhou.aliyuncs.com/subdir/index.html
にリダイレクトされます。親ノード: IndexDocument
Type
列挙型
いいえ
デフォルトホームページが設定されていて、アクセスされるオブジェクトの名前がスラッシュ (/) で終わっておらず、オブジェクトが存在しない場合に実行される操作。このパラメーターは、SupportSubDir が true に設定されている場合にのみ有効になります。RoutingRule の後、ErrorFile の前に有効になります。
bucket.oss-cn-hangzhou.aliyuncs.com/abc
へのアクセスのデフォルトホームページが index.html に設定されており、abc オブジェクトが存在しない場合、Type の有効値は次の操作に対応します。Type のデフォルト値は 0 です。0: OSS は、
オブジェクト + スラッシュ (/) + ホームページ
形式の abc/index.html という名前のオブジェクトが存在するかどうかを確認します。オブジェクトが存在する場合、OSS は 302 と、URL エンコードされた/abc/
を含む Location ヘッダー値を返します。URL エンコードされた /abc/ は、スラッシュ (/) + オブジェクト + スラッシュ (/)
形式です。オブジェクトが存在しない場合、OSS は 404 を返し、ErrorFile の確認を続けます。1: OSS は 404 と NoSuchKey を返し、ErrorFile の確認を続けます。
2: OSS は abc/index.html が存在するかどうかを確認します。abc/index.html が存在する場合、オブジェクトのコンテンツが返されます。abc/index.html が存在しない場合、OSS は 404 を返し、ErrorFile の確認を続けます。
親ノード: IndexDocument
次の表に、ErrorDocument の要素を示します。
要素
タイプ
必須
説明
ErrorDocument
コンテナー
条件付き
IndexDocument、ErrorDocument、RoutingRules のコンテナーのうち、少なくとも 1 つを指定する必要があります。
デフォルト 404 ページを格納するために使用されるコンテナー。
親ノード: WebsiteConfiguration
Key
文字列
条件付き
ErrorDocument を指定する場合は、この要素を指定する必要があります。
エラーページ。
エラーページを指定すると、アクセスするオブジェクトが存在しない場合にエラーページが返されます。
親ノード: ErrorDocument
HttpStatus
文字列
いいえ
エラーページとともに返される HTTP ステータスコード。デフォルト値: 404。
有効値: 200 および 404
親ノード: ErrorDocument
次の表に、RoutingRules、RoutingRule、および RuleNumber の要素を示します。
要素
タイプ
必須
説明
RoutingRules
コンテナー
条件付き
IndexDocument、ErrorDocument、RoutingRules のコンテナーのうち、少なくとも 1 つを指定する必要があります。
RoutingRule を格納するために使用されるコンテナー。
親ノード: WebsiteConfiguration
RoutingRule
コンテナー
いいえ
リダイレクトルールまたはミラーリングベースの原点復帰ルール。最大 20 個のルールを指定できます。
親ノード: RoutingRules
RuleNumber
正の整数
条件付き
RoutingRule を指定する場合は、この要素を指定する必要があります。
リダイレクトルールを照合して実行するために使用されるシーケンス番号。リダイレクトルールは、この要素に基づいて照合されます。一致が成功した場合、そのルールのみが実行され、後続のルールは実行されません。
親ノード: RoutingRule
次の表に、RoutingRules、RoutingRule、および Condition の要素を示します。
要素
タイプ
必須
説明
Condition
コンテナー
条件付き
RoutingRule を指定する場合は、この要素を指定する必要があります。
一致条件。
指定されたすべての条件が満たされた場合、ルールが実行されます。ルールは、Condition のすべてのノードで指定された条件を満たす場合にのみ、一致と見なされます。
親ノード: RoutingRule
KeyPrefixEquals
文字列
いいえ
オブジェクト名のプレフィックス。指定されたプレフィックスを含む名前のオブジェクトのみがルールに一致します。
親ノード: Condition
HttpErrorCodeReturnedEquals
HTTP ステータスコード
いいえ
HTTP ステータスコード。指定されたオブジェクトにアクセスし、指定された HTTP ステータスコードが返された場合にのみ、ルールに一致します。リダイレクトルールがミラーリングベースの原点復帰ルールの場合、この要素の値は 404 です。
親ノード: Condition
IncludeHeader
コンテナー
いいえ
リクエストで指定されたヘッダー。指定されたヘッダーがリクエストに含まれており、ヘッダー値が指定された値と等しい場合にのみ、ルールに一致します。最大 10 個の IncludeHeader コンテナーを指定できます。
親ノード: Condition
Key
文字列
はい
ヘッダーのキー。指定されたヘッダーがリクエストに含まれており、ヘッダー値が Equals で指定された値と等しい場合にのみ、ルールに一致します。
親ノード: IncludeHeader
Equals
文字列
いいえ
ヘッダーの値。Key で指定されたヘッダーがリクエストに含まれており、ヘッダー値が指定された値と等しい場合にのみ、ルールに一致します。
親ノード: IncludeHeader
KeySuffixEquals
文字列
いいえ
オブジェクト名のサフィックス。指定されたサフィックスを含む名前のオブジェクトのみがルールに一致します。
デフォルト値は空で、サフィックスが指定されていないことを示します。
親ノード: Condition
次の表に、RoutingRules、RoutingRule、および Redirect の要素を示します。
要素
タイプ
必須
説明
Redirect
コンテナー
条件付き
RoutingRule を指定する場合は、この要素を指定する必要があります。
ルールが一致した後に実行される操作。
親ノード: RoutingRule
RedirectType
文字列
条件付き
Redirect を指定する場合は、このパラメーターを指定する必要があります。
リダイレクトタイプ。有効値:
ミラー: ミラーリングベースの原点復帰。
外部: 外部リダイレクト。OSS は 3xx HTTP リダイレクト コードと Location ヘッダーを返し、別の IP アドレスへのアクセスをリダイレクトします。
AliCDN: Alibaba Cloud Content Delivery Network ( CDN ) に基づくリダイレクト。OSS はリクエストに追加のヘッダーを追加します。これは External タイプとは異なります。CDN がヘッダーを識別した後、CDN はアクセスを指定された IP アドレスにリダイレクトし、リダイレクトリクエストの代わりに取得したデータをユーザーに返します。
親ノード: リダイレクト
PassQueryString
ブール値
いいえ
システムがリダイレクトルールまたはミラーリングベースの原点復帰ルールを実行するときに、リダイレクトリクエストに元の リクエスト のパラメーターを含めるかどうかを指定します。
たとえば、PassQueryString パラメーターが true に設定されていて、
?a=b&c=d
パラメーターが OSS に送信されるリクエストに含まれている場合、PassQueryString が true に設定され、リダイレクトモードが 302 の場合、このパラメーターは Location ヘッダーに追加されます。たとえば、リクエストがLocation:example.com?a=b&c=d
で、リダイレクトタイプがミラーリングベースの原点復帰の場合、?a=b&c=d パラメーターも原点復帰リクエストに含まれます。デフォルト値: false有効な値: true および false
親ノード: Redirect
MirrorURL
String
Conditional
RedirectType が Mirror に設定されている場合、この要素を指定する必要があります。
ミラーリングベースの原点復帰のソース URL。この要素は、RedirectType の値が Mirror の場合にのみ有効になります。
ソース URL は http:// または https:// で始まり、スラッシュ (/) で終わる必要があります。OSS は URL の末尾にオブジェクト名を追加して、原点復帰 URL を生成します。
たとえば、アクセスするオブジェクトの名前が myobject であるとします。MirrorURL が
http://example.com/
に設定されている場合、原点復帰 URL はhttp://example.com/myobject
になります。MirrorURL がhttp://example.com/dir1/
に設定されている場合、原点復帰 URL はhttp://example.com/dir1/myobject
になります。親ノード: Redirect
MirrorPassQueryString
ブール値
いいえ
この要素は、PassQueryString と同じ役割を果たし、PassQueryString よりも優先順位が高くなります。この要素は、RedirectType の値が Mirror の場合にのみ有効になります。
既定値: false
親ノード: Redirect
MirrorFollowRedirect
ブール値
いいえ
オリジンが 3xx HTTP ステータスコードを返した場合に、Location で指定されたアドレスへのアクセスをリダイレクトするかどうかを指定します。この要素は、RedirectType の値が Mirror の場合にのみ有効になります。
たとえば、ミラーリングベースの原点復帰リクエストが開始されたときに、オリジンが 302 を返し、Location が指定されているとします。
MirrorFollowRedirect を true に設定すると、OSS は Location で指定されたアドレスへのリクエストを続行します。
アクセスは最大 10 回リダイレクトできます。アクセスが 10 回を超えてリダイレクトされた場合、ミラーリングベースの原点復帰リクエストは失敗します。
MirrorFollowRedirect を false に設定すると、OSS は 302 を返し、Location をパススルーします。
デフォルト値: true
親ノード: Redirect
MirrorCheckMd5
ブール値
いいえ
オリジンから返されたレスポンス本文の MD5 ハッシュを確認するかどうかを指定します。この要素は、RedirectType の値が Mirror の場合にのみ有効になります。
MirrorFollowRedirect の値が true で、オリジンから返されたレスポンスに Content-Md5 ヘッダーが含まれている場合、OSS は取得したデータの MD5 ハッシュがヘッダー値と一致するかどうかを確認します。取得したデータの MD5 ハッシュがヘッダー値と一致しない場合、OSS はデータを保存しません。
デフォルト値: false
親ノード: Redirect
MirrorHeaders
コンテナ
いいえ
ミラーリングベースの原点復帰を使用した場合に戻される応答に含まれるヘッダー。この要素は、RedirectType の値が Mirror の場合にのみ有効になります。
親ノード: Redirect
PassAll
ブール値
いいえ
オリジンへのすべてのリクエストヘッダーをパススルーするかどうかを指定します。この要素は、RedirectType の値が Mirror の場合にのみ有効になります。リクエストヘッダーには、次のヘッダーは含まれません。
content-length、authorization2、authorization、range、date などのヘッダー
oss-、x-oss-、および x-drs- で始まるヘッダー
デフォルト値: false
親ノード: MirrorHeaders
パス
文字列
いいえ
オリジンにパススルーするヘッダー。この要素は、RedirectType の値が Mirror の場合にのみ有効になります。
各ヘッダーは最大 1,024 バイトの長さで、文字、数字、およびハイフン (-) のみを含めることができます。
最大 10 個のパスヘッダーを指定できます。
親ノード: MirrorHeaders
削除
文字列
いいえ
オリジンへのパススルーが許可されていないヘッダー。この要素は、RedirectType の値が Mirror の場合にのみ有効になります。
各ヘッダーの長さは最大 1,024 バイトです。このパラメーターの文字セットは、Pass と同じです。
最大 10 個の削除ヘッダーを指定できます。このパラメーターは、PassAll と一緒に使用されます。
親ノード: MirrorHeaders
設定
コンテナ
いいえ
オリジンに送信されるヘッダー。このヘッダーは、リクエストに含まれているかどうかに関係なく、オリジンから返されるデータで設定されます。この要素は、RedirectType の値が Mirror の場合にのみ有効になります。
最大 10 個の Set ヘッダーを指定できます。
親ノード: MirrorHeaders
キー
文字列
条件付き
Set が指定されている場合、この要素を指定する必要があります。
ヘッダーのキー。キーは最大 1,024 バイトです。このパラメーターの文字セットは、Pass と同じです。この要素は、RedirectType の値が Mirror の場合にのみ有効になります。
親ノード: Set
値
文字列
条件付き
この要素は、「Set」が指定されている場合に指定する必要があります。
ヘッダーの値。値は最大 1,024 バイトで、
\r\n
を含めることはできません。この要素は、「RedirectType」の値が「Mirror」の場合にのみ有効になります。親ノード: Set
プロトコル
String
いいえ
リダイレクトに使用するプロトコル。この要素は、RedirectType の値が External または AliCDN の場合にのみ有効になります。
たとえば、test という名前のオブジェクトにアクセスする場合、Protocol が https に設定され、Hostname が
example.com
に設定されている場合、Location ヘッダー値はhttps://example.com/test
になります。有効な値: http および https。
親ノード: Redirect
ホスト名
文字列
いいえ
リダイレクトに使用されるドメイン名。ドメイン名の命名規則に準拠している必要があります。
たとえば、test という名前のオブジェクトにアクセスする場合、プロトコルが https に設定され、ホスト名が
example.com
に設定されている場合、Location ヘッダー値はhttps://example.com/test
になります。親ノード: リダイレクト
ReplaceKeyPrefixWith
文字列
いいえ
リダイレクト中にオブジェクト名のプレフィックスを置き換えるために使用される文字列です。オブジェクトのプレフィックスが空の場合、この文字列はオブジェクト名の前に付加されます。
説明1 つのルール内で指定できる ReplaceKeyWith ノードと ReplaceKeyPrefixWith ノードは、いずれか 1 つのみです。
たとえば、アクセスするオブジェクトが abc/test.txt であるとします。 KeyPrefixEquals を abc/ に、ReplaceKeyPrefixWith を def/ に設定すると、Location ヘッダー値は
http://example.com/def/test.txt
になります。親ノード: Redirect
EnableReplacePrefix
ブール値
いいえ
この要素が true に設定されている場合、オブジェクト名のプレフィックスは、ReplaceKeyPrefixWith で指定された値に置き換えられます。このパラメーターが指定されていないか Empty の場合、オブジェクト名のプレフィックスは切り捨てられます。
説明ReplaceKeyWith 要素が Empty でない場合、EnableReplacePrefix 要素を true に設定することはできません。
既定値: false
親ノード: Redirect
ReplaceKeyWith
文字列
いいえ
リクエストがリダイレクトされるときに、リクエストされたオブジェクト名の置き換えに使用する文字列です。この要素は変数に設定できます。リクエスト内のオブジェクト名を示す ${key} 変数がサポートされています。
たとえば、アクセスするオブジェクトの名前が test であるとします。ReplaceKeyWith が
prefix/${key}.suffix
に設定されている場合、Location ヘッダーで指定されたアドレスはhttp://example.com/prefix/test.suffix
になります。親ノード: Redirect
HTTPRedirectCode
HTTP ステータスコード
いいえ
応答内の HTTP リダイレクト コード。この要素は、RedirectType の値が External または AliCDN の場合にのみ有効になります。デフォルト値:301。
有効な値:301、302、および 307
親ノード:Redirect
レスポンスヘッダー
PutBucketWebsite リクエストへの応答には、共通のレスポンスヘッダーのみが含まれます。詳細については、「共通レスポンスヘッダー」をご参照ください。
例
リクエストの例
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 qn6q**************:77Dv**************** <?xml version="1.0" encoding="UTF-8"?> <WebsiteConfiguration> <IndexDocument> <Suffix>index.html</Suffix> <SupportSubDir>true</SupportSubDir> <Type>0</Type> </IndexDocument> <ErrorDocument> <Key>error.html</Key> <HttpStatus>404</HttpStatus> </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 qn6q**************:77Dv**************** User-Agent: aliyun-sdk-python-test/0.4.0 <WebsiteConfiguration> <IndexDocument> <Suffix>index.html</Suffix> <SupportSubDir>true</SupportSubDir> <Type>0</Type> </IndexDocument> <ErrorDocument> <Key>error.html</Key> <HttpStatus>404</HttpStatus> </ErrorDocument> <RoutingRules> <RoutingRule> <RuleNumber>1</RuleNumber> <Condition> <KeyPrefixEquals>abc/</KeyPrefixEquals> <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals> </Condition> <Redirect> <RedirectType>Mirror</RedirectType> <PassQueryString>true</PassQueryString> <MirrorURL>http://example.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>example.com</HostName> <PassQueryString>false</PassQueryString> <ReplaceKeyWith>prefix/${key}.suffix</ReplaceKeyWith> <HttpRedirectCode>301</HttpRedirectCode> </Redirect> </RoutingRule> <RoutingRule> <Condition> <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals> </Condition> <RuleNumber>3</RuleNumber> <Redirect> <ReplaceKeyWith>prefix/${key}</ReplaceKeyWith> <HttpRedirectCode>302</HttpRedirectCode> <EnableReplacePrefix>false</EnableReplacePrefix> <PassQueryString>false</PassQueryString> <Protocol>http</Protocol> <HostName>example.com</HostName> <RedirectType>External</RedirectType> </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
OSS SDK
ossutil
PutBucketWebsite 操作に対応する ossutil コマンドの詳細については、「put-bucket-website」をご参照ください。
エラーコード
エラーコード | エラーコード | HTTP ステータスコード |
InvalidDigest | 400 | OSS によって計算されたメッセージ本文の Content-MD5 値が、リクエストヘッダーの Content-MD5 値と一致しないために返されるエラーメッセージです。 |