PutBucketWebsite 操作は、静的 Web サイトホスティング用にバケットを設定し、リダイレクトルール (RoutingRule) を設定します。
注意事項
静的 Web サイトは、JavaScript などのクライアントサイドスクリプトを含む静的コンテンツで構成されます。OSS は、PHP、JSP、ASP.NET などのサーバーサイド処理をサポートしていません。
-
PutBucketWebsite には
oss:PutBucketWebsite権限が必要です。RAM ユーザーにカスタムアクセスポリシーを付与する。 -
機能
デフォルトホームページ、デフォルト 404 ページ、およびリダイレクトルール (RoutingRule) を設定します。リダイレクトルールは、3xx リダイレクトとミラーリングベースのオリジンフェッチをサポートします。
-
カスタムドメイン名を使用した静的 Web サイトへのアクセス
カスタムドメイン名を使用して静的 Web サイトにアクセスするには、CNAME レコードを追加してください。詳細については、「カスタムドメイン名をバインドする」をご参照ください。
-
インデックスページとエラーページ
インデックスページとエラーページを指定できます。どちらもバケット内のオブジェクトである必要があります。
-
ルートドメインへの匿名アクセス
静的 Web サイトホスティングを設定すると、OSS はルートドメインへの匿名リクエストに対してインデックスページを返します。ルートドメインへの署名付きリクエストは、GetBucket (ListObjects) API の結果を返します。
リクエスト構文
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>
リクエストヘッダー
DescribeRegions リクエストのすべてのヘッダーは、共通のリクエストヘッダーです。詳細については、「共通のリクエストヘッダー」をご参照ください。
リクエストパラメーター
-
WebsiteConfiguration の内容
名前
タイプ
必須
説明
WebsiteConfiguration
コンテナ
はい
ルートノード。
親ノード:なし
-
IndexDocument の内容
名前
タイプ
必須
説明
IndexDocument
コンテナ
条件付き
IndexDocument、ErrorDocument、RoutingRules のうち、少なくとも 1 つのコンテナを指定する必要があります。
デフォルトホームページのコンテナ。
親ノード:WebsiteConfiguration
Suffix
文字列
条件付き
親ノード IndexDocument を指定する場合、このパラメーターは必須です。
デフォルトホームページ。
OSS は、フォワードスラッシュ (/) で終わる URL へのリクエストに対してこのページを返します。
親ノード:IndexDocument
SupportSubDir
文字列
不要
サブディレクトリへのリクエストを、そのサブディレクトリ内のインデックスページにリダイレクトするかどうかを指定します。有効な値:
-
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 の前に適用されます。
例:デフォルトホームページが index.html で、ファイルパス
bucket.oss-cn-hangzhou.aliyuncs.com/abcにリクエストを送信し、オブジェクト abc が存在しないとします。Type の値ごとの動作は次のとおりです:-
0 (デフォルト):abc/index.html が存在するかどうかを確認します。パスの形式は
Object + / + Homepageです。オブジェクトが存在する場合、OSS は URL エンコードされたパス/abc/への 302 リダイレクトを返します。パスの形式は/ + Object + /です。オブジェクトが存在しない場合、OSS は 404 エラーを返し、その後、エラーページの処理に移ります。 -
1:エラーコード NoSuchKey を含む 404 エラーを返し、その後、エラーページの処理に移ります。
-
2:abc/index.html が存在するかどうかを確認します。オブジェクトが存在する場合、その内容が返されます。オブジェクトが存在しない場合、OSS は 404 エラーを返し、その後、エラーページの処理に移ります。
親ノード:IndexDocument
-
-
ErrorDocument の内容
名前
タイプ
必須
説明
ErrorDocument
コンテナ
条件付き
次のコンテナのうち少なくとも 1 つを指定する必要があります:IndexDocument、ErrorDocument、RoutingRules。
404 エラーページのコンテナ。
親ノード:WebsiteConfiguration
Key
文字列
条件付き
親ノード ErrorDocument を指定する場合、このパラメーターは必須です。
エラーページ。
リクエストされたオブジェクトが存在しない場合に返されます。
親ノード:ErrorDocument
HttpStatus
文字列
任意
エラーページと共に返される HTTP ステータスコード。
有効な値:200、404 (デフォルト)
親ノード:ErrorDocument
-
RoutingRules|RoutingRule|RuleNumber
名前
タイプ
必須
説明
ルーティングルール
コンテナ
条件付き
IndexDocument、ErrorDocument、RoutingRules のいずれか 1 つ以上のコンテナを指定する必要があります。
リダイレクトルールのコンテナです。
親ノード: WebsiteConfiguration
ルーティングルール
コンテナ
任意
リダイレクトルールまたはミラーリングベースのオリジンフェッチルールです。最大 20 個まで設定できます。
親ノード: RoutingRules
ルール番号
正の整数
条件付き
親ノード RoutingRule を指定する場合、このパラメーターは必須です。
シーケンス番号です。OSS はルールを昇順で照合し、最初に一致したルールで停止します。
親ノード: RoutingRule
-
ルーティングルール の Condition の内容
Name
Type
Required
Description
Condition
コンテナ
条件付き
親ノード RoutingRule を指定する場合、このパラメーターは必須です。
一致条件。
ルールを実行するには、すべての条件を満たす必要があります。
親ノード:RoutingRule
KeyPrefixEquals
文字列
No
オブジェクトキーがこのプレフィックスで始まる場合に、ルールが適用されます。
親ノード:Condition
HttpErrorCodeReturnedEquals
HTTP ステータスコード
No
リクエストされたオブジェクトから返され、このルールをトリガーする HTTP ステータスコード。ミラーリングベースのオリジンフェッチの場合は 404 に設定します。
親ノード:Condition
IncludeHeader
コンテナ
No
リクエストに指定したヘッダーと値が含まれている場合に、ルールが適用されます。指定できるヘッダーは最大 10 個です。
親ノード:Condition
Key
文字列
Yes
このルールは、リクエストに指定したヘッダーが含まれ、その値が Equals に指定した値と完全に一致する場合にのみ適用されます。
親ノード:IncludeHeader
Equals
文字列
No
リクエストヘッダーの値。このルールは、リクエストに Key で指定したヘッダーが含まれ、その値がこの値と一致する場合にのみ適用されます。
親ノード:IncludeHeader
KeySuffixEquals
文字列
No
オブジェクトキーがこのサフィックスで終わる場合に、ルールが適用されます。
デフォルト値は空です。これは、どのサフィックスにも一致しないことを意味します。
親ノード:Condition
-
リダイレクト設定
名前
タイプ
必須
説明
Redirect
コンテナ
条件付き
親ノードのルーティングルールを指定する場合、このパラメーターは必須です。
ルールが一致した場合に実行するアクション。
親ノード:ルーティングルール
RedirectType
文字列
条件付き
親ノードの Redirect を指定する場合、このパラメーターは必須です。
リダイレクトタイプ。有効な値:
-
Mirror:ミラーリングベースのオリジンフェッチ。
-
External:外部リダイレクト。OSS は 3xx リダイレクトを別のアドレスに返します。
-
AliCDN:Alibaba Cloud CDN リダイレクト。このタイプは Alibaba Cloud CDN で使用されます。外部リダイレクトとは異なり、OSS はリクエストに特別なヘッダーを追加します。Alibaba Cloud CDN はこのヘッダーを検出すると、ユーザーに 3xx リダイレクトを返す代わりに、リクエストを指定されたアドレスにリダイレクトし、取得したデータをユーザーに返します。
親ノード:Redirect
PassQueryString
Boolean
いいえ
元のリクエストのクエリ文字列をリダイレクトまたはオリジンフェッチリクエストに含めるかどうか。
たとえば、ユーザーがクエリ文字列
?a=b&c=dでリクエストを送信したとします。PassQueryString を true に設定し、ルールが 302 リダイレクトを指定している場合、レスポンスの Location ヘッダーには、Location:example.com?a=b&c=dのようにクエリ文字列が含まれます。ルールがミラーリングベースのオリジンフェッチを指定している場合、オリジンフェッチリクエストにもクエリ文字列が含まれます。有効な値:true、false (デフォルト)
親ノード:Redirect
MirrorURL
文字列
条件付き
RedirectType が Mirror に設定されている場合、このパラメーターは必須です。
ミラーリングベースのオリジンフェッチのオリジンサーバーアドレス。RedirectType が Mirror の場合にのみ有効です。
アドレスは http:// または https:// で始まり、フォワードスラッシュ (/) で終わる必要があります。OSS はこのアドレスにオブジェクトキーを付加して、オリジンフェッチ URL を作成します。
たとえば、リクエストされたオブジェクトが myobject で、このパラメーターを
http://example.com/に設定した場合、オリジンフェッチ URL はhttp://example.com/myobjectになります。このパラメーターをhttp://example.com/dir1/に設定した場合、オリジンフェッチ URL はhttp://example.com/dir1/myobjectになります。親ノード:Redirect
MirrorPassQueryString
Boolean
いいえ
PassQueryString と同じですが、優先度が高くなります。RedirectType が Mirror の場合にのみ有効です。
デフォルト値:false
親ノード:Redirect
MirrorFollowRedirect
Boolean
いいえ
オリジンサーバーからの 3xx リダイレクトに従うかどうか。RedirectType が Mirror の場合にのみ有効です。
たとえば、オリジンサーバーが Location ヘッダーを含む 302 リダイレクトを返すとします。
-
このパラメーターを true に設定すると、OSS は Location ヘッダーで指定されたアドレスに新しいリクエストを送信します。
最大 10 回のリダイレクトに従います。リダイレクトの回数が 10 回を超えると、オリジンフェッチリクエストは失敗します。
-
このパラメーターを false に設定すると、OSS は 302 リダイレクトを返し、Location ヘッダーをクライアントにパススルーします。
デフォルト値:true
親ノード:Redirect
MirrorCheckMd5
Boolean
いいえ
オリジンサーバーからのレスポンスボディの MD5 ハッシュを検証するかどうか。RedirectType が Mirror の場合にのみ有効です。
MirrorCheckMd5 が true で、オリジンからのレスポンスに Content-Md5 ヘッダーが含まれている場合、OSS は取得したデータをヘッダーの値と照合して検証します。データが一致しない場合は保存されません。
デフォルト値:false
親ノード:Redirect
MirrorHeaders
コンテナ
いいえ
オリジンフェッチリクエストに含めるヘッダー。RedirectType が Mirror の場合にのみ有効です。
親ノード:Redirect
PassAll
Boolean
いいえ
以下のヘッダーを除くすべてのリクエストヘッダーをオリジンサーバーにパススルーするかどうか。RedirectType が Mirror の場合にのみ有効です。
-
content-length、authorization2、authorization、範囲、date などのヘッダー
-
oss-、x-oss-、または x-drs- で始まるヘッダー
デフォルト値:false
親ノード:MirrorHeaders
Pass
文字列
いいえ
オリジンサーバーにパススルーする指定のヘッダー。RedirectType が Mirror の場合にのみ有効です。
各ヘッダーの長さは最大 1,024 バイトで、数字 (0-9)、文字 (a-z、A-Z)、ハイフン (-) のみを含めることができます。
最大 10 個のヘッダーを指定できます。
親ノード:MirrorHeaders
Remove
文字列
いいえ
オリジンサーバーへのパススルーを禁止する指定のヘッダー。RedirectType が Mirror の場合にのみ有効です。
各ヘッダーの最大長は 1024 バイトで、Pass と同じ文字セットを使用します。
最大 10 個のヘッダーを指定できます。このパラメーターは通常、PassAll と一緒に使用されます。
親ノード:MirrorHeaders
Set
コンテナ
いいえ
元のリクエストに含まれていたかどうかに関わらず、オリジンフェッチリクエストに含めるヘッダーを設定します。RedirectType が Mirror の場合にのみ有効です。
このコンテナには、最大 10 グループを設定できます。
親ノード:MirrorHeaders
Key
文字列
条件付き
親ノードの Set を指定する場合、このパラメーターは必須です。
設定するヘッダーのキー。キーの長さは最大 1,024 バイトで、数字 (0-9)、文字 (a-z、A-Z)、ハイフン (-) のみを含めることができます。RedirectType が Mirror の場合にのみ有効です。
親ノード:Set
Value
文字列
条件付き
親ノードの Set を指定する場合、このパラメーターは必須です。
設定するヘッダーの値。値の長さは最大 1,024 バイトで、
\r\nを含めることはできません。RedirectType が Mirror の場合にのみ有効です。親ノード:Set
Protocol
文字列
いいえ
リダイレクトに使用するプロトコル。RedirectType が External または AliCDN の場合にのみ有効です。
たとえば、リクエストされたオブジェクトが test で、リダイレクト先を
example.comに設定し、Protocol を https に設定した場合、Location ヘッダーはhttps://example.com/testになります。有効な値:http、https。
親ノード:Redirect
HostName
文字列
いいえ
リダイレクトに使用するドメイン名。有効なドメイン名である必要があります。
たとえば、リクエストされたオブジェクトが test で、Protocol を https に設定し、HostName を
example.comに設定した場合、Location ヘッダーはhttps://example.com/testになります。親ノード:Redirect
ReplaceKeyPrefixWith
文字列
いいえ
リダイレクト中にオブジェクトキーのプレフィックスを置き換える文字列。プレフィックスが空の場合、この文字列はオブジェクトキーの先頭に挿入されます。
説明ReplaceKeyWith または ReplaceKeyPrefixWith のいずれかを指定できますが、両方は指定できません。
たとえば、リクエストされたオブジェクトが abc/test.txt で、KeyPrefixEquals を abc/ に設定し、ReplaceKeyPrefixWith を def/ に設定した場合、Location ヘッダーは
http://example.com/def/test.txtになります。親ノード:Redirect
EnableReplacePrefix
Boolean
いいえ
このパラメーターを true に設定すると、オブジェクトのプレフィックスは ReplaceKeyPrefixWith の値に置き換えられます。このパラメーターが指定されていないか空の場合、オブジェクトのプレフィックスは切り捨てられます。
説明ReplaceKeyWith パラメーターが空でない場合、このパラメーターを 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 (デフォルト)、302、307。
親ノード:Redirect
-
レスポンスヘッダー
DescribeRegions リクエストへのレスポンスのすべてのヘッダーは、共通のレスポンスヘッダーです。詳細については、「共通のレスポンスヘッダー」をご参照ください。
例
-
リクエスト例
PUT /?website HTTP/1.1 Host: oss-example.oss-cn-hangzhou.aliyuncs.com Content-Length: 209 Date: Thu, 17 Apr 2025 03:21:12 GMT Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,AdditionalHeaders=content-length,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e <?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: Thu, 17 Apr 2025 09:03:18 GMT Content-Length: 2064 Host: test.oss-cn-hangzhou-internal.aliyuncs.com Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,AdditionalHeaders=content-length,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e 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
SDK
CLI (ossutil)
ossutil コマンド:put-bucket-website
エラーコード
|
エラーコード |
HTTP ステータスコード |
説明 |
|
InvalidDigest |
400 |
Content-MD5 ヘッダーの値が、OSS がリクエストボディから計算した MD5 ハッシュと一致しません。 |