PutBucketWebsite
調(diào)用PutBucketWebsite接口將存儲空間(Bucket)設(shè)置為靜態(tài)網(wǎng)站托管模式并設(shè)置跳轉(zhuǎn)規(guī)則(RoutingRule)。
注意事項
靜態(tài)網(wǎng)站是指所有的網(wǎng)頁都由靜態(tài)內(nèi)容構(gòu)成,包括客戶端執(zhí)行的腳本,例如JavaScript。OSS不支持需要服務(wù)器端處理的內(nèi)容,例如PHP、JSP、ASP.NET等。
功能支持
此接口主要用于設(shè)置默認主頁、默認404頁和RoutingRule。RoutingRule用來指定3xx跳轉(zhuǎn)規(guī)則以及鏡像回源規(guī)則。其中鏡像回源支持公共云和金融云。
使用自有域名訪問靜態(tài)網(wǎng)站
如果要使用自有域名來訪問基于Bucket的靜態(tài)網(wǎng)站,您可以通過域名CNAME來實現(xiàn)。具體操作,請參見綁定自定義域名。
索引頁面和錯誤頁面
將一個Bucket設(shè)置為靜態(tài)網(wǎng)站托管模式時,如果指定了索引頁面或錯誤頁面,則指定的索引頁面和錯誤頁面為該Bucket內(nèi)的某個Object。
對靜態(tài)網(wǎng)站根域名的匿名訪問
將一個Bucket設(shè)置為靜態(tài)網(wǎng)站托管模式后,對靜態(tài)網(wǎng)站根域名的匿名訪問,OSS將返回索引頁面。對靜態(tài)網(wǎng)站根域名的簽名訪問,OSS將返回GetBucket (ListObjects)的結(jié)果。
請求語法
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>
當(dāng)您在OSS ON云盒中調(diào)用該接口時,您需要將Host替換為云盒Endpoint。更多信息,請參見云盒Endpoint。
請求頭
此接口僅涉及公共請求頭。更多信息,請參見公共請求頭(Common Request Headers)。
請求參數(shù)
WebsiteConfiguration的內(nèi)容
名稱
類型
是否必選
描述
WebsiteConfiguration
容器
是
根節(jié)點。
父節(jié)點:無
IndexDocument的內(nèi)容
名稱
類型
是否必選
描述
IndexDocument
容器
有條件
至少指定IndexDocument、ErrorDocument、RoutingRules三個容器中的一個。
默認主頁的容器。
父節(jié)點:WebsiteConfiguration
Suffix
字符串
有條件
如果指定了父節(jié)點IndexDocument,則必須指定此項。
默認主頁。
設(shè)置默認主頁后,如果訪問以正斜線(/)結(jié)尾的Object,則OSS都會返回此默認主頁。
父節(jié)點:IndexDocument
SupportSubDir
字符串
否
訪問子目錄時,是否支持跳轉(zhuǎn)到子目錄下的默認主頁。取值范圍如下:
true:轉(zhuǎn)到子目錄下的默認主頁。
false(默認):不轉(zhuǎn)到子目錄下的默認主頁,而是轉(zhuǎn)到根目錄下的默認主頁。
假設(shè)默認主頁為index.html,要訪問
bucket.oss-cn-hangzhou.aliyuncs.com/subdir/
,如果設(shè)置SupportSubDir為false,則轉(zhuǎn)到bucket.oss-cn-hangzhou.aliyuncs.com/index.html
;如果設(shè)置SupportSubDir為true,則轉(zhuǎn)到bucket.oss-cn-hangzhou.aliyuncs.com/subdir/index.html
。父節(jié)點:IndexDocument
Type
枚舉值
否
設(shè)置默認主頁后,訪問以非正斜線(/)結(jié)尾的Object,且該Object不存在時的行為。 只有設(shè)置SupportSubDir為true時才生效,且生效的順序在RoutingRule之后、ErrorFile之前。
假設(shè)默認主頁為index.html,要訪問的文件路徑為
bucket.oss-cn-hangzhou.aliyuncs.com/abc
,且abc這個Object不存在,此時Type的不同取值對應(yīng)的行為如下:0(默認):檢查abc/index.html是否存在(即
Object + 正斜線(/)+ 主頁
的形式),如果存在則返回302,Location頭為/abc/
的URL編碼(即正斜線(/) + Object + 正斜線(/)
的形式),如果不存在則返回404,繼續(xù)檢查ErrorFile。1:直接返回404,報錯NoSuchKey,繼續(xù)檢查ErrorFile。
2:檢查abc/index.html是否存在,如果存在則返回該Object的內(nèi)容;如果不存在則返回404,繼續(xù)檢查ErrorFile。
父節(jié)點:IndexDocument
ErrorDocument的內(nèi)容
名稱
類型
是否必選
描述
ErrorDocument
容器
有條件
至少指定IndexDocument、ErrorDocument、RoutingRules三個容器中的一個。
404頁面的容器。
父節(jié)點:WebsiteConfiguration
Key
字符串
有條件
如果指定了父節(jié)點ErrorDocument,則必須指定此項。
錯誤頁面。
指定錯誤頁面后,如果訪問的Object不存在,則返回此錯誤頁面。
父節(jié)點:ErrorDocument
HttpStatus
字符串
否
返回錯誤頁面時的HTTP狀態(tài)碼。
取值:200、404(默認)
父節(jié)點:ErrorDocument
RoutingRules|RoutingRule|RuleNumber的內(nèi)容
名稱
類型
是否必選
描述
RoutingRules
容器
有條件
至少指定IndexDocument、ErrorDocument、RoutingRules三個容器中的一個。
RoutingRule的容器。
父節(jié)點:WebsiteConfiguration
RoutingRule
容器
否
指定跳轉(zhuǎn)規(guī)則或者鏡像回源規(guī)則,最多指定20個RoutingRule。
父節(jié)點:RoutingRules
RuleNumber
正整數(shù)
有條件
如果指定了父節(jié)點RoutingRule,則必須指定此項。
匹配和執(zhí)行RoutingRule的序號,OSS將按照此序號依次匹配規(guī)則。如果匹配成功,則執(zhí)行此規(guī)則,后續(xù)的規(guī)則不再執(zhí)行。
父節(jié)點:RoutingRule
RoutingRules|RoutingRule|Condition的內(nèi)容
名稱
類型
是否必選
描述
Condition
容器
有條件
如果指定了父節(jié)點RoutingRule,則必須指定此項。
匹配的條件。
如果指定的項都滿足,則執(zhí)行此規(guī)則。只有滿足此容器下的各個節(jié)點的所有條件才算匹配。
父節(jié)點:RoutingRule
KeyPrefixEquals
字符串
否
只有匹配此前綴的Object才能匹配此規(guī)則。
父節(jié)點:Condition
HttpErrorCodeReturnedEquals
HTTP狀態(tài)碼
否
訪問指定Object時,返回此status才能匹配此規(guī)則。當(dāng)跳轉(zhuǎn)規(guī)則是鏡像回源類型時,此字段必須為404。
父節(jié)點:Condition
IncludeHeader
容器
否
只有請求中包含了指定Header且值為指定值時,才能匹配此規(guī)則。該容器最多可指定10個。
父節(jié)點:Condition
Key
字符串
是
只有請求中包含了此Header且值為Equals的指定值時,才能匹配此規(guī)則。
父節(jié)點:IncludeHeader
Equals
字符串
否
只有請求中包含了Key指定的Header且值為指定值時,才能匹配此規(guī)則。
父節(jié)點:IncludeHeader
KeySuffixEquals
字符串
否
只有匹配此字段指定的后綴才能匹配此規(guī)則。
默認值為空,表示不匹配指定的后綴。
父節(jié)點:Condition
RoutingRules|RoutingRule|Redirect的內(nèi)容
名稱
類型
是否必選
描述
Redirect
容器
有條件
如果指定了父節(jié)點RoutingRule,則必須指定此項。
指定匹配此規(guī)則后執(zhí)行的動作。
父節(jié)點:RoutingRule
RedirectType
字符串
有條件
如果指定了父節(jié)點Redirect,則必須指定此項。
指定跳轉(zhuǎn)的類型。取值范圍如下:
Mirror:鏡像回源。
External:外部跳轉(zhuǎn),即OSS會返回一個3xx請求,指定跳轉(zhuǎn)到另外一個地址。
AliCDN:阿里云CDN跳轉(zhuǎn),主要用于阿里云的CDN。與External不同的是,OSS會額外添加一個Header。阿里云CDN識別到此Header后會主動跳轉(zhuǎn)到指定的地址,返回給用戶獲取到的數(shù)據(jù),而不是將3xx跳轉(zhuǎn)請求返回給用戶。
父節(jié)點:Redirect
PassQueryString
布爾
否
執(zhí)行跳轉(zhuǎn)或者鏡像回源規(guī)則時,是否攜帶請求參數(shù)。
用戶請求OSS時攜帶了請求參數(shù)
?a=b&c=d
,并且設(shè)置PassQueryString為true,如果規(guī)則為302跳轉(zhuǎn),則跳轉(zhuǎn)的Location頭中會添加此請求參數(shù)。例如Location:example.com?a=b&c=d
,跳轉(zhuǎn)類型為鏡像回源,則在發(fā)起的回源請求中也會攜帶此請求參數(shù)。取值:true、false(默認)
父節(jié)點:Redirect
MirrorURL
字符串
有條件
如果RedirectType指定為Mirror,則必須指定此項。
鏡像回源的源站地址。只有設(shè)置RedirectType為Mirror時才生效。
源站地址必須以http://或者https://開頭,并且以正斜線(/)結(jié)尾,OSS會在此地址后帶上Object名稱組成回源URL。
例如要訪問的Object名稱為myobject,如果指定此項為
http://example.com/
,則回源URL為http://example.com/myobject
,如果指定此項為http://example.com/dir1/
,則回源URL為http://example.com/dir1/myobject
。父節(jié)點:Redirect
MirrorPassQueryString
布爾
否
與PassQueryString作用相同,優(yōu)先級高于PassQueryString。只有設(shè)置RedirectType為Mirror時才生效。
默認值:false
父節(jié)點:Redirect
MirrorFollowRedirect
布爾
否
如果鏡像回源獲取的結(jié)果為3xx,是否繼續(xù)跳轉(zhuǎn)到指定的Location獲取數(shù)據(jù)。 只有設(shè)置RedirectType為Mirror時才生效。
例如發(fā)起鏡像回源請求時,源站返回了302,并且指定了Location。
如果設(shè)置此項為true,則OSS會繼續(xù)請求Location對應(yīng)的地址。
最多能跳轉(zhuǎn)10次,如果跳轉(zhuǎn)超過10次,則返回鏡像回源失敗。
如果設(shè)置此項為false,則OSS會返回302,并透傳Location。
默認值:true
父節(jié)點:Redirect
MirrorCheckMd5
布爾
否
是否檢查回源body的MD5。 只有設(shè)置RedirectType為Mirror時才生效。
當(dāng)設(shè)置MirrorCheckMd5為true,并且源站返回的response中含有Content-Md5頭時,OSS檢查拉取的數(shù)據(jù)MD5是否與此Header匹配,如果不匹配,則不保存在OSS上。
默認值:false
父節(jié)點:Redirect
MirrorHeaders
容器
否
指定鏡像回源時攜帶的Header。只有設(shè)置RedirectType為Mirror時才生效。
父節(jié)點:Redirect
PassAll
布爾
否
是否透傳除以下Header之外的其他Header到源站。只有設(shè)置RedirectType為Mirror時才生效。
content-length、authorization2、authorization、range、date等Header
以oss-/x-oss-/x-drs-開頭的Header
默認值:false
父節(jié)點:MirrorHeaders
Pass
字符串
否
透傳指定的Header到源站。只有設(shè)置RedirectType為Mirror時才生效。
每個Header長度最多為1024個字節(jié),字符集為0~9、A~Z、a~z以及短劃線(-)。
此字段最多可指定10個。
父節(jié)點:MirrorHeaders
Remove
字符串
否
禁止透傳指定的Header到源站。只有設(shè)置RedirectType為Mirror時才生效。
每個Header長度最多為1024個字節(jié),字符集與Pass相同。
此字段最多可指定10個,通常與PassAll一起使用。
父節(jié)點:MirrorHeaders
Set
容器
否
設(shè)置一個Header傳到源站,不管請求中是否攜帶這些指定的Header,回源時都會設(shè)置這些Header。只有設(shè)置RedirectType為Mirror時才生效。
此容器最多可指定10組。
父節(jié)點:MirrorHeaders
Key
字符串
有條件
若指定了父節(jié)點Set,則必須指定此項。
設(shè)置Header的key,最多1024個字節(jié),字符集與Pass相同。只有設(shè)置RedirectType為Mirror時才生效。
父節(jié)點:Set
Value
字符串
有條件
若指定了父節(jié)點Set,則必須指定此項。
設(shè)置Header的value,最多1024個字節(jié),不能出現(xiàn)
\r\n
。只有設(shè)置RedirectType為Mirror時才生效。父節(jié)點:Set
Protocol
字符串
否
跳轉(zhuǎn)時的協(xié)議。只有設(shè)置RedirectType為External或者AliCDN時才生效。
如果要訪問的文件為test,設(shè)置跳轉(zhuǎn)到
example.com
,并且設(shè)置Protocol為https,則Location頭為https://example.com/test
。取值:http、https。
父節(jié)點:Redirect
HostName
字符串
否
跳轉(zhuǎn)時的域名,域名需符合域名規(guī)范。
如果要訪問的文件為test,設(shè)置Protocol為https,并且設(shè)置Hostname為
example.com
,則Location頭為https://example.com/test
。父節(jié)點:Redirect
ReplaceKeyPrefixWith
字符串
否
Redirect時Object名稱的前綴將替換成該值。如果前綴為空,則將這個字符串插入Object名稱的前面。
說明僅允許存在ReplaceKeyWith或ReplaceKeyPrefixWith節(jié)點。
假設(shè)要訪問的Object為abc/test.txt,如果設(shè)置KeyPrefixEquals為abc/,ReplaceKeyPrefixWith為def/,則Location頭為
http://example.com/def/test.txt
。父節(jié)點:Redirect
EnableReplacePrefix
布爾
否
如果設(shè)置此字段為true,則Object的前綴將被替換為ReplaceKeyPrefixWith指定的值。如果未指定此字段或為空,則表示截斷Object前綴。
說明當(dāng)ReplaceKeyWith字段不為空時,不能設(shè)置此字段為true。
默認值:false
父節(jié)點:Redirect
ReplaceKeyWith
字符串
否
Redirect時Object名稱將替換成ReplaceKeyWith指定的值,ReplaceKeyWith支持設(shè)置變量。目前支持的變量為${key},表示該請求中的Object名稱。
假設(shè)要訪問的Object為test,如果設(shè)置ReplaceKeyWith為
prefix/${key}.suffix
,則Location頭為http://example.com/prefix/test.suffix
。父節(jié)點:Redirect
HttpRedirectCode
HTTP狀態(tài)碼
否
跳轉(zhuǎn)時返回的狀態(tài)碼。只有設(shè)置RedirectType為External或者AliCDN時才生效。
取值:301(默認)、302、307。
父節(jié)點:Redirect
響應(yīng)頭
此接口僅涉及公共響應(yīng)頭。更多信息,請參見公共響應(yīng)頭(Common Response Headers)。
示例
請求示例
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
SDK
錯誤碼
錯誤碼 | HTTP狀態(tài)碼 | 描述 |
InvalidDigest | 400 | 上傳了Content-MD5請求頭后,OSS會計算消息體的Content-MD5并檢查一致性,如果不一致則返回此錯誤碼。 |