此操作用來配置網站托管屬性。如果Bucket已經存在了website,此操作會替換原有website。只有根用戶和擁有PUT Bucket Website權限的子用戶才能執行此操作。
注意
如果配置靜態網站托管后,當匿名用戶直接訪問Bucket的域名,會將靜態網站文件下載到本地。如果要實現訪問靜態網站時是預覽網站內容,而非下載靜態網站文件,靜態網站域名須是Bucket綁定的已備案自定義域名,為Bucket綁定自定義域名請聯系天翼云客服申請。
OOS自有網站托管域名不支持HTTPS訪問,用戶自定義域名支持HTTPS訪問。如果需要支持通過HTTPS訪問,請聯系天翼云客服,提供域名證書,證書支持格式:crt+key或者PEM,請確保提供的證書在有效期內,建議證書有效期至少1年及以上,避免使用免費證書。
設置Bucket的網絡配置請求消息體的上限是10KiB。
盡量避免目標Bucket名中帶有“.”,否則通過HTTPS訪問時可能出現客戶端校驗證書出錯。
網站托管配置步驟如下:
-
創建一個公共讀屬性的存儲桶(Bucket)。
-
向天翼云客服提交工單,申請客戶自定義域名添加白名單。
-
在域名管理中添加別名。
- 如果不使用CDN加速,將Bucket的CNAME Record Value(BuckeNname.oos-website-cn.oos-xx.ctyunapi.cn)作為別名添加到域名管理系統中。
- 如果使用CDN加速,將CDN廠商提供的別名添加到域名管理系統中,然后在CDN回源地址中配置OOS側的CNAME Record Value,并將回源host配置為您的自定義域名(如your***domain.com)。
說明創建Bucket時顯示的Endpoint為oos-cn.ctyunapi.cn,該Endpoint是針對整個對象存儲網絡的域名,該域名在解析時,會根據用戶地理位置的不同解析到不同的資源池地址。如果創建Bucket時有多個數據位置,系統默認選取創建時第一個有效數據位置作為CNAME Record Value(BucketName.oos-website-cn.oos-xx.ctyunapi.cn)。CNAME Record Value可以通過控制臺Bucket屬性中的網站查看。如果創建Bucket時,只有一個數據位置可用,則在Bucket區域中展示的CNAME Record Value為BucketName.oos-website-cn.oos-cn.ctyunapi.cn。所以如果使用靜態網站托管,建議您根據Bucket區域屬性中的數據位置,選擇您想使用的數據位置的CNAME Record Value作為域名管理系統中的別名。例如您創建Bucket時有效數據位置為沈陽、蘭州、成都、貴陽,則Bucket中展示的CNAME Record Value為BucketName.oos-website-cn.oos-lnsy.ctyunapi.cn,您可以將BucketName.oos-website-cn.oos-lnsy.ctyunapi.cn作為別名,也可以將蘭州、成都或者貴陽為域名的CNAME Record Value作為您的別名。
-
上傳文件。
將網站的所有文件(html、CSS、js、圖片等)上傳到之前創建的Bucket中, 注意要保持文件之間的相對路徑。
-
配置Bucket網站屬性:可以通過控制臺或者調用本接口配置。
請求語法
托管模式為當前存儲桶
PUT /?website HTTP/1.1
Host: BucketName.oos-cn.ctyunapi.cn
Date: date
Content-Length: ContentLength
Authorization: SignatureValue
<WebsiteConfiguration xmlns="//s3.amazonaws.com/doc/2006-03-01/">
<IndexDocument>
<Suffix>index.html</Suffix>
</IndexDocument>
<ErrorDocument>
<Key>errorDocument.html</Key>
</ErrorDocument>
<RoutingRules>
<RoutingRule>
<Condition>
<HttpErrorCodeReturnedEquals>string</HttpErrorCodeReturnedEquals>
<KeyPrefixEquals>string</KeyPrefixEquals>
</Condition>
<Redirect>
<HostName>string</HostName>
<Protocol>string</Protocol>
<ReplaceKeyPrefixWith>string</ReplaceKeyPrefixWith>
<ReplaceKeyWith>string</ReplaceKeyWith>
</Redirect>
</RoutingRule>
</RoutingRules>
</WebsiteConfiguration>
托管模式為重定向請求
PUT /?website HTTP/1.1
Host: BucketName.oos-cn.ctyunapi.cn
Date: date
Content-Length: ContentLength
Authorization: SignatureValue
<WebsiteConfiguration xmlns="//s3.amazonaws.com/doc/2006-03-01/">
<RedirectAllRequestsTo>
<HostName>string</HostName>
<Protocol>string</Protocol>
</RedirectAllRequestsTo>
</WebsiteConfiguration>
請求參數
名稱 描述 是否必須 WebsiteConfiguration 請求的容器。
類型:容器。
子節點:IndexDocument、ErrorDocument、RoutingRules或RedirectAllRequestsTo。
注意IndexDocument和RedirectAllRequestsTo互斥。如果填寫了RedirectAllRequestsTo,則IndexDocument、ErrorDocument、RoutingRules都不能填寫。
是 IndexDocument Suffix元素的容器。
注意:如果未填寫RedirectAllRequestsTo,則IndexDocument必填。
類型:容器。
父節點:WebsiteConfiguration。
子節點:Suffix。
否 Suffix 在請求website endpoint上的路徑時,Suffix會被加在請求的后面。例如,如果suffix是Index.html,而你請求的是bucket/images/,那么返回的響應是名為images/index.html的Object。
類型:字符串。
父節點:IndexDocument。
是 ErrorDocument Key的容器。
類型:容器。
父節點:WebsiteConfiguration。
子節點:Key。
否 Key 如果出現4XX錯誤,會返回指定的Object。
類型:字符串。
有效值:長度為1~1024的字符串。
父節點:ErrorDocument。
是 RoutingRules 托管模式配置到當前Bucket的重定向規則容器。
注意如果RoutingRules下有多個RoutingRule,各RoutingRule之間無影響,按照配置的先后順序向下執行,當有一個滿足條件時,就不再繼續向后匹配。如果都沒有匹配,就不使用重定向規則。
類型:容器。
父節點:WebsiteConfiguration。
子節點:RoutingRule。
否 RoutingRule 重定向規則的容器。一條重定向規則包含一個Condition和一個Redirect,當Condition匹配時,Redirect生效。容器中至少要有一個重定向規則。
注意一個RoutingRule下,出現多個Condition和Redirect時,以最后一個為準。
類型:容器。
父節點:RoutingRules。
子節點:Condition、Redirect。
是 Condition 描述重定向規則匹配的條件的容器。如果重定向規則匹配的條件未配置,則重定向規則將應用于所有請求。
注意該容器可以不配置,如果配置,則至少應該包含HttpErrorCodeReturnedEquals、KeyPrefixEquals中的一個。
類型:容器。
父節點:RoutingRule。
子節點:HttpErrorCodeReturnedEquals、KeyPrefixEquals。
否 HttpErrorCodeReturnedEquals 指定Redirect生效時的HTTP錯誤碼。當發生錯誤時,如果錯誤碼等于這個值,那么Redirect生效。
注意ErrorCodeReturnedEquals和KeyPrefixEquals同時存在時,只有都匹配時,Redirect才生效。
類型:字符串。
有效值:[ 400, 417 ],[ 500, 505]。
例如:當返回的http錯誤碼為404時重定向到NotFound.html,可以將Condition中的HttpErrorCodeReturnedEquals設置為404,Redirect中的ReplaceKeyWith設置為NotFound.html。
父節點:Condition。
否 KeyPrefixEquals 重定向規則生效時的文件名的前綴。
注意HttpErrorCodeReturnedEquals 和KeyPrefixEquals同時存在時,只有都匹配時,Redirect才生效。
類型:字符串。
取值:長度為0-1024的字符串。
父節點:Condition。
否 Redirect 重定信息容器。
注意Redirect配置包含的元素可以為空,也可以包含以下元素:Protocol、HostName、ReplaceKeyPrefixWith、ReplaceKeyWith。當某一元素存在多條值時以最后一條為準。
類型:容器。
父節點:RoutingRule。
子節點:Protocol、HostName、ReplaceKeyPrefixWith、ReplaceKeyWith。
是 Protocol 重定向請求時使用的協議。
類型:字符串。
有效值:http、https,默認值為http。
父節點:Redirect或者RedirectAllRequestsTo。
否 HostName 重定向請求時使用的站點名。
如果父節點為RedirectAllRequestsTo,此項必須填寫。
類型:字符串。
有效值:1~1024個字符,不能包含空格。父節點為Redirect,也不能包含斜杠(/)。
父節點:Redirect或者RedirectAllRequestsTo。
否 ReplaceKeyPrefixWith 重定向請求時使用的文件名前綴。
注意ReplaceKeyPrefixWith與ReplaceKeyWith不能同時存在。
類型:字符串。
有效值:0~1024個字符。
父節點:Redirect。
否 ReplaceKeyWith 指定重定向請求時使用的文件名。
注意ReplaceKeyPrefixWith與ReplaceKeyWith不能同時存在。
類型:字符串。
有效值:0~1024個字符。
父節點:Redirect。
否 RedirectAllRequestsTo 托管模式為重定向請求的容器。
注意如果未填寫IndexDocument,則RedirectAllRequestsTo必填。如果填寫了RedirectAllRequestsTo,則IndexDocument、ErrorDocument、RoutingRules都不能填寫。
父節點:WebsiteConfiguration。
子節點:HostName、Protocol。
否
請求示例1
指定index.html為首頁,error.html為錯誤頁。
PUT?/?website?HTTP/1.1
x-amz-content-sha256:?UNSIGNED-PAYLOAD
x-amz-date:?20220718T084033Z
Host:?example-bucket.oos-cn.ctyunapi.cn
Accept:?text/html,?image/gif,?image/jpeg,?*;?q=.2,?*/*;?q=.2
Connection:?keep-alive
Content-Length:?268
Authorization: SignatureValue
?
<WebsiteConfiguration?xmlns='//s3.amazonaws.com/doc/2006-03-01/'>
???????<IndexDocument>
???????????????<Suffix>index.html</Suffix>
???????</IndexDocument>
???????<ErrorDocument>
???????????????<Key>error.html</Key>
???????</ErrorDocument>
</WebsiteConfiguration>
響應示例1
HTTP/1.1?200?OK
Date:?Mon,?18?Jul?2022?08:40:33?GMT
x-amz-request-id:?91dd8b753eba4237aefaf102080508e70a14f6f8fbf6ff0bec
Content-Length:?0
Server:?CTYUN
請求示例2
將所有的請求重定向到網址docs.oos-cn.ctyunapi.cn,且使用https協議。
PUT?/?website?HTTP/1.1
x-amz-content-sha256:?UNSIGNED-PAYLOAD
x-amz-date:?20220718T084539Z
Host:?example-bucket.oos-cn.ctyunapi.cn
Accept:?text/html,?image/gif,?image/jpeg,?*;?q=.2,?*/*;?q=.2
Connection:?keep-alive
Content-Length:?252
Authorization: SignatureValue
?
<WebsiteConfiguration?xmlns="//s3.amazonaws.com/doc/2006-03-01/">
????????<RedirectAllRequestsTo>
??????????????<HostName>docs.oos-cn.ctyunapi.cn</HostName>
??????????????<Protocol>https</Protocol>
???????</RedirectAllRequestsTo>
</WebsiteConfiguration>
響應示例2
HTTP/1.1?200?OK
Date:?Mon,?18?Jul?2022?08:45:39?GMT
x-amz-request-id:?98449be04a8e4abb93dfd6e7edeaedcceff9dbdde0dbe4f0d1
Content-Length:?0
Server:?CTYUN
請求示例3
指定index.html為首頁,error.html為錯誤頁。將所有前綴為“docs”的請求,全部重定向至本Bucket中前綴為“documents/”的文件上。
PUT?/?website?HTTP/1.1
x-amz-content-sha256:?UNSIGNED-PAYLOAD
x-amz-date:?20220718T085146Z
Host:?example-bucket.oos-cn.ctyunapi.cn
Accept:?text/html,?image/gif,?image/jpeg,?*;?q=.2,?*/*;?q=.2
Connection:?keep-alive
Content-Length:?471
Authorization: SignatureValue
?
<WebsiteConfiguration?xmlns='//s3.amazonaws.com/doc/2006-03-01/'>
??<IndexDocument>
????<Suffix>index.html</Suffix>
??</IndexDocument>
??<ErrorDocument>
????<Key>error.html</Key>
??</ErrorDocument>?
??<RoutingRules>
????<RoutingRule>
????<Condition>
??????<KeyPrefixEquals>docs</KeyPrefixEquals>
????</Condition>
????<Redirect>
??????<ReplaceKeyPrefixWith>documents/</ReplaceKeyPrefixWith>
????</Redirect>
????</RoutingRule>
??</RoutingRules>
</WebsiteConfiguration>
響應示例3
HTTP/1.1?200?OK
Date:?Mon,?18?Jul?2022?08:51:46?GMT
x-amz-request-id:?01413e0eca2e4cbf66b2a9bac0bdc09fc2ccaeb0b3aeb7c3a4
Content-Length:?0
Server:?CTYUN
請求示例4
指定index.html為首頁,error.html為錯誤頁。如果發生404錯誤,重定向到網址“docs.oos-cn.ctyunapi.cn”上前綴為“report-404/”的文件。
PUT?/?website?HTTP/1.1
x-amz-content-sha256:?UNSIGNED-PAYLOAD
x-amz-date:?20220718T090739Z
User-Agent:?Java/1.8.0_221
Host:?example-bucket.oos-cn.ctyunapi.cn
Accept:?text/html,?image/gif,?image/jpeg,?*;?q=.2,?*/*;?q=.2
Connection:?keep-alive
Content-Length:?538
Authorization: SignatureValue
?
<WebsiteConfiguration?xmlns='//s3.amazonaws.com/doc/2006-03-01/'>
??<IndexDocument>
????<Suffix>index.html</Suffix>
??</IndexDocument>
??<ErrorDocument>
????<Key>error.html</Key>
??</ErrorDocument>
??<RoutingRules>
????<RoutingRule>
????<Condition>
??????<HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
????</Condition>
????<Redirect>
???????<HostName>docs.oos-cn.ctyunapi.cn</HostName>
??????<ReplaceKeyPrefixWith>report-404/</ReplaceKeyPrefixWith>
????</Redirect>
????</RoutingRule>
??</RoutingRules>
</WebsiteConfiguration>
響應示例4
HTTP/1.1?200?OK
Date:?Mon,?18?Jul?2022?09:07:39?GMT
x-amz-request-id:?2814d402a9f64041024e45565c595c3b5e684a4c4f4a535f40
Content-Length:?0
Server:?CTYUN
請求示例5
指定index.html為首頁,error.html為錯誤頁。將前綴為“images/”的請求,重定向至本Bucket內的“errorpage.html”文件。
PUT?/?website?HTTP/1.1
x-amz-content-sha256:?UNSIGNED-PAYLOAD
x-amz-date:?20220718T091138Z
Host:?example-bucket.oos-cn.ctyunapi.cn
Accept:?text/html,?image/gif,?image/jpeg,?*;?q=.2,?*/*;?q=.2
Connection:?keep-alive
Content-Length:?465
Authorization: SignatureValue
?
<WebsiteConfiguration?xmlns='//s3.amazonaws.com/doc/2006-03-01/'>
??<IndexDocument>
????<Suffix>index.html</Suffix>
??</IndexDocument>
??<ErrorDocument>
????<Key>error.html</Key>
??</ErrorDocument>
??<RoutingRules>
????<RoutingRule>
????<Condition>
??????<KeyPrefixEquals>images/</KeyPrefixEquals>
????</Condition>
????<Redirect>
??????<ReplaceKeyWith>errorpage.html</ReplaceKeyWith>
????</Redirect>
????</RoutingRule>
??</RoutingRules>
</WebsiteConfiguration>
響應示例5
HTTP/1.1?200?OK
Date:?Mon,?18?Jul?2022?09:11:38?GMT
x-amz-request-id:?2ef16ade344d4c111f6b6273797679587b8567696c67707c5d
Content-Length:?0
Server:?CTYUN