全部產品
Search
文件中心

:PutBucketWebsite

更新時間:Jun 19, 2024

調用PutBucketWebsite介面將儲存空間(Bucket)設定為靜態網站託管模式並設定跳轉規則(RoutingRule)。

注意事項

靜態網站是指所有的網頁都由靜態內容構成,包括用戶端執行的指令碼,例如JavaScript。OSS不支援需要伺服器端處理的內容,例如PHP、JSP、ASP.NET等。

  • 功能支援

    此介面主要用於設定預設首頁、預設404頁和RoutingRule。RoutingRule用來指定3xx跳轉規則以及鏡像回源規則。其中鏡像回源支援公用雲和金融雲。

  • 使用自有網域名稱訪問靜態網站

    如果要使用自有網域名稱來訪問基於Bucket的靜態網站,您可以通過網域名稱CNAME來實現。具體操作,請參見綁定自訂網域名

  • 索引頁面和錯誤頁面

    將一個Bucket設定為靜態網站託管模式時,如果指定了索引頁面或錯誤頁面,則指定的索引頁面和錯誤頁面為該Bucket內的某個Object。

  • 對靜態網站根網域名稱的匿名訪問

    將一個Bucket設定為靜態網站託管模式後,對靜態網站根網域名稱的匿名訪問,OSS將返回索引頁面。對靜態網站根網域名稱的簽名訪問,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>

要求標頭

此介面僅涉及公用要求標頭。更多資訊,請參見公用要求標頭(Common Request Headers)

請求參數

  • WebsiteConfiguration的內容

    名稱

    類型

    是否必選

    描述

    WebsiteConfiguration

    容器

    根節點。

    父節點:無

  • IndexDocument的內容

    名稱

    類型

    是否必選

    描述

    IndexDocument

    容器

    有條件

    至少指定IndexDocument、ErrorDocument、RoutingRules三個容器中的一個。

    預設首頁的容器。

    父節點:WebsiteConfiguration

    Suffix

    字串

    有條件

    如果指定了父節點IndexDocument,則必須指定此項。

    預設首頁。

    設定預設首頁後,如果訪問以正斜線(/)結尾的Object,則OSS都會返回此預設首頁。

    父節點: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

    枚舉值

    設定預設首頁後,訪問以非正斜線(/)結尾的Object,且該Object不存在時的行為。 只有設定SupportSubDir為true時才生效,且生效的順序在RoutingRule之後、ErrorFile之前。

    假設預設首頁為index.html,要訪問的檔案路徑為bucket.oss-cn-hangzhou.aliyuncs.com/abc,且abc這個Object不存在,此時Type的不同取值對應的行為如下:

    • 0(預設):檢查abc/index.html是否存在(即Object + 正斜線(/)+ 首頁的形式),如果存在則返回302,Location頭為/abc/的URL編碼(即正斜線(/) + Object + 正斜線(/)的形式),如果不存在則返回404,繼續檢查ErrorFile。

    • 1:直接返回404,報錯NoSuchKey,繼續檢查ErrorFile。

    • 2:檢查abc/index.html是否存在,如果存在則返回該Object的內容;如果不存在則返回404,繼續檢查ErrorFile。

    父節點:IndexDocument

  • ErrorDocument的內容

    名稱

    類型

    是否必選

    描述

    ErrorDocument

    容器

    有條件

    至少指定IndexDocument、ErrorDocument、RoutingRules三個容器中的一個。

    404頁面的容器。

    父節點:WebsiteConfiguration

    Key

    字串

    有條件

    如果指定了父節點ErrorDocument,則必須指定此項。

    錯誤頁面。

    指定錯誤頁面後,如果訪問的Object不存在,則返回此錯誤頁面。

    父節點:ErrorDocument

    HttpStatus

    字串

    返回錯誤頁面時的HTTP狀態代碼。

    取值:200、404(預設)

    父節點:ErrorDocument

  • RoutingRules|RoutingRule|RuleNumber的內容

    名稱

    類型

    是否必選

    描述

    RoutingRules

    容器

    有條件

    至少指定IndexDocument、ErrorDocument、RoutingRules三個容器中的一個。

    RoutingRule的容器。

    父節點:WebsiteConfiguration

    RoutingRule

    容器

    指定跳轉規則或者鏡像回源規則,最多指定20個RoutingRule。

    父節點:RoutingRules

    RuleNumber

    正整數

    有條件

    如果指定了父節點RoutingRule,則必須指定此項。

    匹配和執行RoutingRule的序號,OSS將按照此序號依次匹配規則。如果匹配成功,則執行此規則,後續的規則不再執行。

    父節點:RoutingRule

  • RoutingRules|RoutingRule|Condition的內容

    名稱

    類型

    是否必選

    描述

    Condition

    容器

    有條件

    如果指定了父節點RoutingRule,則必須指定此項。

    匹配的條件。

    如果指定的項都滿足,則執行此規則。只有滿足此容器下的各個節點的所有條件才算匹配。

    父節點:RoutingRule

    KeyPrefixEquals

    字串

    只有匹配此首碼的Object才能匹配此規則。

    父節點:Condition

    HttpErrorCodeReturnedEquals

    HTTP狀態代碼

    訪問指定Object時,返回此status才能匹配此規則。當跳轉規則是鏡像回源類型時,此欄位必須為404。

    父節點:Condition

    IncludeHeader

    容器

    只有請求中包含了指定Header且值為指定值時,才能匹配此規則。該容器最多可指定10個。

    父節點:Condition

    Key

    字串

    只有請求中包含了此Header且值為Equals的指定值時,才能匹配此規則。

    父節點:IncludeHeader

    Equals

    字串

    只有請求中包含了Key指定的Header且值為指定值時,才能匹配此規則。

    父節點:IncludeHeader

    KeySuffixEquals

    字串

    只有匹配此欄位指定的尾碼才能匹配此規則。

    預設值為空白,表示不匹配指定的尾碼。

    父節點:Condition

  • RoutingRules|RoutingRule|Redirect的內容

    名稱

    類型

    是否必選

    描述

    Redirect

    容器

    有條件

    如果指定了父節點RoutingRule,則必須指定此項。

    指定匹配此規則後執行的動作。

    父節點:RoutingRule

    RedirectType

    字串

    有條件

    如果指定了父節點Redirect,則必須指定此項。

    指定跳轉的類型。取值範圍如下:

    • Mirror:鏡像回源。

    • External:外部跳轉,即OSS會返回一個3xx請求,指定跳轉到另外一個地址。

    • AliCDN:阿里雲CDN跳轉,主要用於阿里雲的CDN。與External不同的是,OSS會額外添加一個Header。阿里雲CDN識別到此Header後會主動跳轉到指定的地址,返回給使用者擷取到的資料,而不是將3xx跳轉請求返回給使用者。

    父節點:Redirect

    PassQueryString

    布爾

    執行跳轉或者鏡像回源規則時,是否攜帶請求參數。

    使用者請求OSS時攜帶了請求參數?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會在此地址後帶上Object名稱組成回源URL。

    例如要訪問的Object名稱為myobject,如果指定此項為http://example.com/,則回源URL為http://example.com/myobject,如果指定此項為http://example.com/dir1/,則回源URL為http://example.com/dir1/myobject

    父節點:Redirect

    MirrorPassQueryString

    布爾

    與PassQueryString作用相同,優先順序高於PassQueryString。只有設定RedirectType為Mirror時才生效。

    預設值:false

    父節點:Redirect

    MirrorFollowRedirect

    布爾

    如果鏡像回源擷取的結果為3xx,是否繼續跳轉到指定的Location擷取資料。 只有設定RedirectType為Mirror時才生效。

    例如發起鏡像回源請求時,來源站點返回了302,並且指定了Location。

    • 如果設定此項為true,則OSS會繼續請求Location對應的地址。

      最多能跳轉10次,如果跳轉超過10次,則返回鏡像回源失敗。

    • 如果設定此項為false,則OSS會返回302,並透傳Location。

    預設值:true

    父節點:Redirect

    MirrorCheckMd5

    布爾

    是否檢查回源body的MD5。 只有設定RedirectType為Mirror時才生效。

    當設定MirrorCheckMd5為true,並且來源站點返回的response中含有Content-Md5頭時,OSS檢查拉取的資料MD5是否與此Header匹配,如果不匹配,則不儲存在OSS上。

    預設值:false

    父節點:Redirect

    MirrorHeaders

    容器

    指定鏡像回源時攜帶的Header。只有設定RedirectType為Mirror時才生效。

    父節點:Redirect

    PassAll

    布爾

    是否透傳除以下Header之外的其他Header到來源站點。只有設定RedirectType為Mirror時才生效。

    • content-length、authorization2、authorization、range、date等Header

    • 以oss-/x-oss-/x-drs-開頭的Header

    預設值:false

    父節點:MirrorHeaders

    Pass

    字串

    透傳指定的Header到來源站點。只有設定RedirectType為Mirror時才生效。

    每個Header長度最多為1024個位元組,字元集為0~9、A~Z、a~z以及短劃線(-)。

    此欄位最多可指定10個。

    父節點:MirrorHeaders

    Remove

    字串

    禁止透傳指定的Header到來源站點。只有設定RedirectType為Mirror時才生效。

    每個Header長度最多為1024個位元組,字元集與Pass相同。

    此欄位最多可指定10個,通常與PassAll一起使用。

    父節點:MirrorHeaders

    Set

    容器

    設定一個Header傳到來源站點,不管請求中是否攜帶這些指定的Header,回源時都會設定這些Header。只有設定RedirectType為Mirror時才生效。

    此容器最多可指定10組。

    父節點:MirrorHeaders

    Key

    字串

    有條件

    若指定了父節點Set,則必須指定此項。

    設定Header的key,最多1024個位元組,字元集與Pass相同。只有設定RedirectType為Mirror時才生效。

    父節點:Set

    Value

    字串

    有條件

    若指定了父節點Set,則必須指定此項。

    設定Header的value,最多1024個位元組,不能出現\r\n。只有設定RedirectType為Mirror時才生效。

    父節點:Set

    Protocol

    字串

    跳轉時的協議。只有設定RedirectType為External或者AliCDN時才生效。

    如果要訪問的檔案為test,設定跳轉到example.com,並且設定Protocol為https,則Location頭為https://example.com/test

    取值:httphttps

    父節點:Redirect

    HostName

    字串

    跳轉時的網域名稱,網域名稱需符合網域名稱規範。

    如果要訪問的檔案為test,設定Protocol為https,並且設定Hostname為example.com,則Location頭為https://example.com/test

    父節點:Redirect

    ReplaceKeyPrefixWith

    字串

    Redirect時Object名稱的首碼將替換成該值。如果首碼為空白,則將這個字串插入Object名稱的前面。

    說明

    僅允許存在ReplaceKeyWith或ReplaceKeyPrefixWith節點。

    假設要訪問的Object為abc/test.txt,如果設定KeyPrefixEquals為abc/,ReplaceKeyPrefixWith為def/,則Location頭為http://example.com/def/test.txt

    父節點:Redirect

    EnableReplacePrefix

    布爾

    如果設定此欄位為true,則Object的首碼將被替換為ReplaceKeyPrefixWith指定的值。如果未指定此欄位或為空白,則表示截斷Object首碼。

    說明

    當ReplaceKeyWith欄位不為空白時,不能設定此欄位為true。

    預設值:false

    父節點:Redirect

    ReplaceKeyWith

    字串

    Redirect時Object名稱將替換成ReplaceKeyWith指定的值,ReplaceKeyWith支援設定變數。目前支援的變數為${key},表示該請求中的Object名稱。

    假設要訪問的Object為test,如果設定ReplaceKeyWith為prefix/${key}.suffix,則Location頭為http://example.com/prefix/test.suffix

    父節點:Redirect

    HttpRedirectCode

    HTTP狀態代碼

    跳轉時返回的狀態代碼。只有設定RedirectType為External或者AliCDN時才生效。

    取值:301(預設)、302、307。

    父節點:Redirect

回應標頭

此介面僅涉及公用回應標頭。更多資訊,請參見公用回應標頭(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狀態代碼

描述

InvalidDigest

400

上傳了Content-MD5要求標頭後,OSS會計算訊息體的Content-MD5並檢查一致性,如果不一致則返回此錯誤碼。