TOS 支持托管静态网站,您可以将静态网站的所有内容存储至 TOS 存储桶,配置静态网站规则后,即可通过存储桶域名访问该网站。
注意
Content-Disposition:attachment
,即从浏览器访问网页类型文件时,将不会直接预览网站,而会将网站的内容下载到本地。以下代码用于设置重定向所有的请求到另外一个站点。
package main import ( "context" "fmt" "github.com/volcengine/ve-tos-golang-sdk/v2/tos" ) func checkErr(err error) { if err != nil { if serverErr, ok := err.(*tos.TosServerError); ok { fmt.Println("Error:", serverErr.Error()) fmt.Println("Request ID:", serverErr.RequestID) fmt.Println("Response Status Code:", serverErr.StatusCode) fmt.Println("Response Header:", serverErr.Header) fmt.Println("Response Err Code:", serverErr.Code) fmt.Println("Response Err Msg:", serverErr.Message) } else { fmt.Println("Error:", err) } panic(err) } } func main() { var ( accessKey = os.Getenv("TOS_ACCESS_KEY") secretKey = os.Getenv("TOS_SECRET_KEY") // Bucket 对应的 Endpoint,以华北2(北京)为例:https://tos-cn-beijing.volces.com endpoint = "https://tos-cn-beijing.volces.com" region = "cn-beijing" // 填写 BucketName bucketName = "*** Provide your bucket name ***" ctx = context.Background() ) // 初始化客户端 client, err := tos.NewClientV2(endpoint, tos.WithRegion(region), tos.WithCredentials(tos.NewStaticCredentials(accessKey, secretKey))) checkErr(err) // 场景1 重定向所有的请求到另一个站点 input := &tos.PutBucketWebsiteInput{ Bucket: bucketName, RedirectAllRequestsTo: &tos.RedirectAllRequestsTo{ HostName: "www.example.com", Protocol: "http", }, } output, err := client.PutBucketWebsite(ctx, input) checkErr(err) fmt.Println("PutBucketWebsite Request ID:", output.RequestID) // 场景2 根据规则重定向请求 input = &tos.PutBucketWebsiteInput{ Bucket: bucketName, IndexDocument: &tos.IndexDocument{ Suffix: "index.html", }, ErrorDocument: &tos.ErrorDocument{ Key: "error.html", }, // 前缀匹配,获取重定向结果 RoutingRules: &tos.RoutingRules{Rules: []tos.RoutingRule{{ // 重定向规则的条件配置 Condition: tos.RoutingRuleCondition{ // 指定重定向规则的对象键前缀匹配条件 KeyPrefixEquals: "prefix", // 指定重定向规则的错误码匹配条件 HttpErrorCodeReturnedEquals: 403, }, // 重定向规则的具体重定向目标配置 Redirect: tos.RoutingRuleRedirect{ // 指定重定向规则的目标协议 Protocol: "https", HostName: "www.redirect.com", }, }, }}, } output, err = client.PutBucketWebsite(ctx, input) checkErr(err) fmt.Println("PutBucketWebsite Request ID:", output.RequestID) }
注意
要获取桶的网站配置规则,默认您必须为桶所有者。
以下代码用于获取桶的网站配置规则。
package main import ( "context" "fmt" "github.com/volcengine/ve-tos-golang-sdk/v2/tos" ) func checkErr(err error) { if err != nil { if serverErr, ok := err.(*tos.TosServerError); ok { fmt.Println("Error:", serverErr.Error()) fmt.Println("Request ID:", serverErr.RequestID) fmt.Println("Response Status Code:", serverErr.StatusCode) fmt.Println("Response Header:", serverErr.Header) fmt.Println("Response Err Code:", serverErr.Code) fmt.Println("Response Err Msg:", serverErr.Message) } else { fmt.Println("Error:", err) } panic(err) } } func main() { var ( accessKey = os.Getenv("TOS_ACCESS_KEY") secretKey = os.Getenv("TOS_SECRET_KEY") // Bucket 对应的 Endpoint,以华北2(北京)为例:https://tos-cn-beijing.volces.com endpoint = "https://tos-cn-beijing.volces.com" region = "cn-beijing" // 填写 BucketName bucketName = "*** Provide your bucket name ***" ctx = context.Background() ) // 初始化客户端 client, err := tos.NewClientV2(endpoint, tos.WithRegion(region), tos.WithCredentials(tos.NewStaticCredentials(accessKey, secretKey))) checkErr(err) output, err := client.GetBucketWebsite(ctx, &tos.GetBucketWebsiteInput{Bucket: bucketName}) checkErr(err) fmt.Println("GetBucketWebsite Request ID:", output.RequestID) if output.RedirectAllRequestsTo != nil { fmt.Println("GetBucketWebsite RedirectAllRequestsTo HostName:", output.RedirectAllRequestsTo.HostName) fmt.Println("GetBucketWebsite RedirectAllRequestsTo Protocol:", output.RedirectAllRequestsTo.Protocol) } if output.IndexDocument != nil { fmt.Println("GetBucketWebsite IndexDocument ForbiddenSubDir:", output.IndexDocument.ForbiddenSubDir) fmt.Println("GetBucketWebsite IndexDocument Suffix:", output.IndexDocument.Suffix) } if output.ErrorDocument != nil { fmt.Println("GetBucketWebsite ErrorDocument Key:", output.ErrorDocument.Key) } for _, rule := range output.RoutingRules { fmt.Println("GetBucketWebsite RoutingRules Rule Condition HttpErrorCodeReturnedEquals:", rule.Condition.HttpErrorCodeReturnedEquals) fmt.Println("GetBucketWebsite RoutingRules Rule Condition KeyPrefixEquals:", rule.Condition.KeyPrefixEquals) fmt.Println("GetBucketWebsite RoutingRules Rule Redirect HostName:", rule.Redirect.HostName) fmt.Println("GetBucketWebsite RoutingRules Rule Redirect Protocol:", rule.Redirect.Protocol) fmt.Println("GetBucketWebsite RoutingRules Rule Redirect ReplaceKeyWith:", rule.Redirect.ReplaceKeyWith) fmt.Println("GetBucketWebsite RoutingRules Rule Redirect ReplaceKeyPrefixWith:", rule.Redirect.ReplaceKeyPrefixWith) fmt.Println("GetBucketWebsite RoutingRules Rule Redirect HttpRedirectCode:", rule.Redirect.HttpRedirectCode) } }
注意
要删除桶的网站配置规则,默认您必须为桶所有者。
以下代码用于删除桶的网站配置规则。
package main import ( "context" "fmt" "github.com/volcengine/ve-tos-golang-sdk/v2/tos" ) func checkErr(err error) { if err != nil { if serverErr, ok := err.(*tos.TosServerError); ok { fmt.Println("Error:", serverErr.Error()) fmt.Println("Request ID:", serverErr.RequestID) fmt.Println("Response Status Code:", serverErr.StatusCode) fmt.Println("Response Header:", serverErr.Header) fmt.Println("Response Err Code:", serverErr.Code) fmt.Println("Response Err Msg:", serverErr.Message) } else { fmt.Println("Error:", err) } panic(err) } } func main() { var ( accessKey = os.Getenv("TOS_ACCESS_KEY") secretKey = os.Getenv("TOS_SECRET_KEY") // Bucket 对应的 Endpoint,以华北2(北京)为例:https://tos-cn-beijing.volces.com endpoint = "https://tos-cn-beijing.volces.com" region = "cn-beijing" // 填写 BucketName bucketName = "*** Provide your bucket name ***" ctx = context.Background() ) // 初始化客户端 client, err := tos.NewClientV2(endpoint, tos.WithRegion(region), tos.WithCredentials(tos.NewStaticCredentials(accessKey, secretKey))) checkErr(err) output, err := client.DeleteBucketWebsite(ctx, &tos.DeleteBucketWebsiteInput{Bucket: bucketName}) checkErr(err) fmt.Println("DeleteBucketWebsite Request ID:", output.RequestID) }
关于设置静态网站配置的更多信息,请参见设置静态网站。