Operasi PutBucketWebsite mengonfigurasi bucket untuk hosting situs web statis dan menetapkan aturan pengalihan (RoutingRule).
Catatan penggunaan
Situs web statis terdiri dari konten statis, termasuk skrip sisi klien seperti JavaScript. OSS tidak mendukung pemrosesan sisi server seperti PHP, JSP, atau ASP.NET.
-
PutBucketWebsite memerlukan izin
oss:PutBucketWebsite. Berikan kebijakan akses kustom kepada RAM user. -
Fitur
Mengonfigurasi halaman utama default, halaman 404 default, dan aturan pengalihan (RoutingRule). Aturan pengalihan mendukung redirect 3xx dan Pengembalian ke sumber berbasis mirroring.
-
Akses situs web statis menggunakan nama domain kustom
Untuk mengakses situs web statis menggunakan nama domain kustom, tambahkan Rekaman CNAME. Ikat nama domain kustom.
-
Halaman indeks dan error
Anda dapat menentukan halaman indeks dan halaman error. Keduanya harus berupa objek dalam bucket.
-
Akses anonim ke domain root
Setelah hosting situs web statis dikonfigurasi, OSS mengembalikan halaman indeks untuk permintaan anonim ke domain root. Permintaan bertanda tangan ke domain root mengembalikan hasil operasi GetBucket (ListObjects).
Sintaksis permintaan
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>
Header permintaan
DescribeRegions hanya menggunakan header permintaan umum. Untuk informasi selengkapnya, lihat Header permintaan umum.
Parameter permintaan
-
Isi WebsiteConfiguration
Name
Type
Required
Description
WebsiteConfiguration
Container
Yes
Node root.
Parent node: None
-
Isi Dokumen Indeks
Name
Type
Required
Description
IndexDocument
Container
Conditional
Anda harus menentukan setidaknya salah satu container berikut: IndexDocument, ErrorDocument, dan RoutingRules.
Container untuk halaman utama default.
Parent node: WebsiteConfiguration
Suffix
String
Conditional
Parameter ini wajib jika Anda menentukan node induk IndexDocument.
Halaman utama default.
OSS mengembalikan halaman ini untuk permintaan ke URL yang diakhiri garis miring (/).
Parent node: IndexDocument
SupportSubDir
String
No
Apakah akan mengalihkan permintaan untuk subdirektori ke halaman indeks di subdirektori tersebut. Nilai yang valid:
-
true: Mengalihkan permintaan ke halaman indeks di subdirektori.
-
false (default): Tidak mengalihkan permintaan ke halaman indeks di subdirektori. Sebagai gantinya, permintaan dialihkan ke halaman indeks di direktori root.
Sebagai contoh, halaman utama default adalah index.html dan permintaan dikirim ke
bucket.oss-cn-hangzhou.aliyuncs.com/subdir/. Jika Anda mengatur SupportSubDir ke false, permintaan dialihkan kebucket.oss-cn-hangzhou.aliyuncs.com/index.html. Jika Anda mengatur SupportSubDir ke true, permintaan dialihkan kebucket.oss-cn-hangzhou.aliyuncs.com/subdir/index.html.Parent node: IndexDocument
Type
Enumeration
No
Operasi yang dilakukan ketika halaman utama default ditetapkan, nama Object yang diakses tidak diakhiri garis miring (/), dan Object tersebut tidak ada. Operasi ini hanya berlaku ketika SupportSubDir diatur ke true dan diterapkan setelah RoutingRule tetapi sebelum ErrorFile.
Sebagai contoh, halaman utama default adalah index.html, permintaan dikirim untuk path file
bucket.oss-cn-hangzhou.aliyuncs.com/abc, dan objek abc tidak ada. Tindakan untuk nilai berbeda dari Type adalah sebagai berikut:-
0 (default): Memeriksa apakah abc/index.html ada. Path-nya dalam format
Object + / + Homepage. Jika objek tersebut ada, OSS mengembalikan redirect 302 ke path yang telah di-encode URL/abc/. Path-nya dalam format/ + Object + /. Jika objek tidak ada, OSS mengembalikan error 404 lalu memeriksa keberadaan halaman error. -
1: Mengembalikan error 404 dengan kode kesalahan NoSuchKey lalu memeriksa keberadaan halaman error.
-
2: Memeriksa apakah abc/index.html ada. Jika objek tersebut ada, kontennya dikembalikan. Jika objek tidak ada, OSS mengembalikan error 404 lalu memeriksa keberadaan halaman error.
Parent node: IndexDocument
-
-
Isi dokumen error
Name
Type
Required
Description
ErrorDocument
Container
Conditional
Anda harus menentukan setidaknya salah satu container berikut: IndexDocument, ErrorDocument, dan RoutingRules.
Container untuk halaman error 404.
Parent node: WebsiteConfiguration
Key
String
Conditional
Parameter ini wajib jika Anda menentukan node induk ErrorDocument.
Halaman error.
Dikembalikan saat objek yang diminta tidak ada.
Parent node: ErrorDocument
HttpStatus
String
No
Kode status HTTP yang dikembalikan bersama halaman error.
Nilai yang valid: 200, 404 (default)
Parent node: ErrorDocument
-
RoutingRules|RoutingRule|RuleNumber
Name
Type
Required
Description
RoutingRules
Container
Conditional
Anda harus menentukan setidaknya salah satu container berikut: IndexDocument, ErrorDocument, dan RoutingRules.
Container untuk aturan pengalihan.
Parent node: WebsiteConfiguration
RoutingRule
Container
No
Aturan pengalihan atau aturan pengembalian ke sumber berbasis mirroring. Maksimal: 20 aturan.
Parent node: RoutingRules
RuleNumber
Positive integer
Conditional
Parameter ini wajib jika Anda menentukan node induk RoutingRule.
Nomor urutan. OSS mencocokkan aturan secara berurutan naik dan berhenti pada kecocokan pertama.
Parent node: RoutingRule
-
Isi Condition dalam RoutingRule
Name
Type
Required
Description
Condition
Container
Conditional
Parameter ini wajib jika Anda menentukan node induk RoutingRule.
Kondisi pencocokan.
Semua kondisi harus terpenuhi agar aturan dieksekusi.
Parent node: RoutingRule
KeyPrefixEquals
String
No
Kunci objek harus memiliki awalan ini agar aturan berlaku.
Parent node: Condition
HttpErrorCodeReturnedEquals
HTTP status code
No
Kode status HTTP yang dikembalikan untuk objek yang diminta yang memicu aturan ini. Untuk pengembalian ke sumber berbasis mirroring, atur ke 404.
Parent node: Condition
IncludeHeader
Container
No
Permintaan harus menyertakan header dan nilainya yang ditentukan agar aturan berlaku. Anda dapat menentukan hingga 10 header.
Parent node: Condition
Key
String
Yes
Aturan ini hanya berlaku jika permintaan berisi header yang ditentukan dan nilainya persis sesuai dengan nilai yang ditentukan untuk Equals.
Parent node: IncludeHeader
Equals
String
No
Nilai header permintaan. Aturan hanya berlaku jika permintaan menyertakan header yang ditentukan oleh Key dan nilainya sesuai dengan nilai ini.
Parent node: IncludeHeader
KeySuffixEquals
String
No
Kunci objek harus memiliki akhiran ini agar aturan berlaku.
Nilai default kosong, yang berarti tidak ada akhiran yang dicocokkan.
Parent node: Condition
-
Konfigurasi Redirect
Name
Type
Required
Description
Redirect
Container
Conditional
Parameter ini wajib jika Anda menentukan node induk RoutingRule.
Aksi yang dilakukan saat aturan cocok.
Parent node: RoutingRule
RedirectType
String
Conditional
Parameter ini wajib jika Anda menentukan node induk Redirect.
Tipe redirect. Nilai yang valid:
-
Mirror: pengembalian ke sumber berbasis mirroring.
-
External: redirect eksternal. OSS mengembalikan redirect 3xx ke alamat lain.
-
AliCDN: redirect Alibaba Cloud CDN. Tipe ini digunakan untuk Alibaba Cloud CDN. Berbeda dengan redirect eksternal, OSS menambahkan header tambahan ke permintaan. Setelah Alibaba Cloud CDN mendeteksi header ini, permintaan dialihkan ke alamat yang ditentukan dan data yang diambil dikembalikan ke pengguna, bukan mengembalikan permintaan redirect 3xx ke pengguna.
Parent node: Redirect
PassQueryString
Boolean
No
Apakah menyertakan string kueri dari permintaan asli dalam permintaan redirect atau pengembalian ke sumber.
Sebagai contoh, pengguna mengirim permintaan dengan string kueri
?a=b&c=d. Jika Anda mengatur PassQueryString ke true dan aturan menentukan redirect 302, header Location dalam respons menyertakan string kueri, sepertiLocation:example.com?a=b&c=d. Jika aturan menentukan pengembalian ke sumber berbasis mirroring, permintaan pengembalian ke sumber juga menyertakan string kueri.Nilai yang valid: true, false (default)
Parent node: Redirect
MirrorURL
String
Conditional
Parameter ini wajib jika RedirectType diatur ke Mirror.
Alamat server origin untuk pengembalian ke sumber berbasis mirroring. Hanya berlaku saat RedirectType adalah Mirror.
Alamat harus diawali dengan http:// atau https:// dan diakhiri garis miring (/). OSS menambahkan nama objek ke alamat ini untuk membuat URL pengembalian ke sumber.
Sebagai contoh, jika objek yang diminta adalah myobject dan Anda mengatur parameter ini ke
http://example.com/, URL pengembalian ke sumber adalahhttp://example.com/myobject. Jika Anda mengatur parameter ini kehttp://example.com/dir1/, URL pengembalian ke sumber adalahhttp://example.com/dir1/myobject.Parent node: Redirect
MirrorPassQueryString
Boolean
No
Sama seperti PassQueryString tetapi memiliki prioritas lebih tinggi. Hanya berlaku saat RedirectType adalah Mirror.
Nilai default: false
Parent node: Redirect
MirrorFollowRedirect
Boolean
No
Apakah mengikuti redirect 3xx dari server origin. Hanya berlaku saat RedirectType adalah Mirror.
Sebagai contoh, server origin mengembalikan redirect 302 dengan header Location.
-
Jika Anda mengatur parameter ini ke true, OSS mengirim permintaan baru ke alamat yang ditentukan dalam header Location.
Maksimal 10 redirect diikuti. Jika jumlah redirect melebihi 10, permintaan pengembalian ke sumber gagal.
-
Jika Anda mengatur parameter ini ke false, OSS mengembalikan redirect 302 dan meneruskan header Location ke client.
Nilai default: true
Parent node: Redirect
MirrorCheckMd5
Boolean
No
Apakah memverifikasi hash MD5 dari badan respons dari server origin. Hanya berlaku saat RedirectType adalah Mirror.
Saat MirrorCheckMd5 bernilai true dan respons origin menyertakan header Content-Md5, OSS memverifikasi data yang ditarik terhadap nilai header tersebut. Data yang tidak cocok tidak disimpan.
Nilai default: false
Parent node: Redirect
MirrorHeaders
Container
No
Header yang disertakan dalam permintaan pengembalian ke sumber. Hanya berlaku saat RedirectType adalah Mirror.
Parent node: Redirect
PassAll
Boolean
No
Apakah meneruskan semua header permintaan ke server origin, kecuali header berikut. Hanya berlaku saat RedirectType adalah Mirror.
-
Header seperti content-length, authorization2, authorization, range, dan date
-
Header yang diawali dengan oss-, x-oss-, atau x-drs-
Nilai default: false
Parent node: MirrorHeaders
Pass
String
No
Header yang ditentukan untuk diteruskan ke server origin. Hanya berlaku saat RedirectType adalah Mirror.
Panjang setiap header maksimal 1.024 byte dan hanya boleh berisi angka (0-9), huruf (a-z, A-Z), dan tanda hubung (-).
Anda dapat menentukan hingga 10 header.
Parent node: MirrorHeaders
Remove
String
No
Header yang ditentukan untuk dicegah agar tidak diteruskan ke server origin. Hanya berlaku saat RedirectType adalah Mirror.
Panjang setiap header maksimal 1.024 byte dan menggunakan set karakter yang sama seperti Pass.
Anda dapat menentukan hingga 10 header. Parameter ini biasanya digunakan bersama PassAll.
Parent node: MirrorHeaders
Set
Container
No
Menetapkan header untuk disertakan dalam permintaan pengembalian ke sumber, terlepas dari apakah permintaan asli memuatnya atau tidak. Hanya berlaku saat RedirectType adalah Mirror.
Anda dapat menetapkan container ini hingga maksimal 10 grup.
Parent node: MirrorHeaders
Key
String
Conditional
Parameter ini wajib jika Anda menentukan node induk Set.
Kunci header yang akan ditetapkan. Panjang kunci maksimal 1.024 byte dan hanya boleh berisi angka (0-9), huruf (a-z, A-Z), dan tanda hubung (-). Hanya berlaku saat RedirectType adalah Mirror.
Parent node: Set
Value
String
Conditional
Parameter ini wajib jika Anda menentukan node induk Set.
Nilai header yang akan ditetapkan. Panjang nilai maksimal 1.024 byte dan tidak boleh berisi
\r\n. Hanya berlaku saat RedirectType adalah Mirror.Parent node: Set
Protocol
String
No
Protokol yang digunakan untuk redirect. Hanya berlaku saat RedirectType adalah External atau AliCDN.
Sebagai contoh, jika objek yang diminta adalah test, Anda menetapkan tujuan redirect ke
example.com, dan Anda menetapkan Protocol ke https, header Location adalahhttps://example.com/test.Nilai yang valid: http, https.
Parent node: Redirect
HostName
String
No
Nama domain yang digunakan untuk redirect. Nama domain harus valid.
Sebagai contoh, jika objek yang diminta adalah test, Anda menetapkan Protocol ke https, dan Anda menetapkan HostName ke
example.com, header Location adalahhttps://example.com/test.Parent node: Redirect
ReplaceKeyPrefixWith
String
No
String yang menggantikan awalan kunci objek selama redirect. Jika awalan kosong, string ini disisipkan di awal kunci objek.
CatatanAnda dapat menentukan ReplaceKeyWith atau ReplaceKeyPrefixWith, tetapi tidak keduanya.
Sebagai contoh, jika objek yang diminta adalah abc/test.txt, Anda menetapkan KeyPrefixEquals ke abc/, dan Anda menetapkan ReplaceKeyPrefixWith ke def/, header Location adalah
http://example.com/def/test.txt.Parent node: Redirect
EnableReplacePrefix
Boolean
No
Jika parameter ini diatur ke true, awalan objek diganti dengan nilai ReplaceKeyPrefixWith. Jika parameter ini tidak ditentukan atau kosong, awalan objek dipotong.
CatatanAnda tidak dapat mengatur parameter ini ke true jika parameter ReplaceKeyWith tidak kosong.
Nilai default: false
Parent node: Redirect
ReplaceKeyWith
String
No
Menggantikan seluruh kunci objek selama redirect. Gunakan variabel ${key} untuk mereferensikan kunci objek asli.
Sebagai contoh, jika objek yang diminta adalah test dan Anda menetapkan ReplaceKeyWith ke
prefix/${key}.suffix, header Location adalahhttp://example.com/prefix/test.suffix.Parent node: Redirect
HttpRedirectCode
HTTP status code
No
Kode status HTTP yang dikembalikan untuk redirect. Hanya berlaku saat RedirectType adalah External atau AliCDN.
Nilai yang valid: 301 (default), 302, 307.
Parent node: Redirect
-
Header respons
Respons hanya berisi header respons umum. Untuk informasi selengkapnya, lihat Header respons umum.
Contoh
-
Contoh permintaan
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> -
Contoh respons
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 -
Contoh lengkap
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)
Perintah ossutil: put-bucket-website.
Kode kesalahan
|
Kode kesalahan |
Kode status HTTP |
Deskripsi |
|
InvalidDigest |
400 |
Nilai header Content-MD5 tidak sesuai dengan hash MD5 yang dihitung OSS untuk badan permintaan. |