TOS 支持托管静态网站,您可以将静态网站的所有内容存储至 TOS 存储桶,配置静态网站规则后,即可通过存储桶域名访问该网站。
注意
Content-Disposition:attachment
,即从浏览器访问网页类型文件时,将不会直接预览网站,而会将网站的内容下载到本地。以下代码用于设置桶 examplebucket 的网站配置规则。
#include "TosClientV2.h" using namespace VolcengineTos; int main(void){ // 初始化 TOS 账号信息 // Your Region 填写 Bucket 所在 Region std::string region = "Your Region"; std::string accessKey = std::getenv("TOS_ACCESS_KEY"); std::string secretKey = std::getenv("TOS_SECRET_KEY"); // 填写 Bucket 名称,例如 examplebucket std::string bucketName = "examplebucket"; // 初始化网络等资源 InitializeClient(); // 创建交互的 client TosClientV2 client(region, accessKey, secretKey); PutBucketWebsiteInput input(bucketName); // 设置将所有请求重定向到指定 hostName // RedirectAllRequestsTo redirectAllRequestsTo("www.volcengine.com", "https"); // input.setRedirectAllRequestsTo(redirectAllRequestsTo); // 设置默认主页为 index.html // 设置访问子目录时,是否禁止转到子目录下的默认主页,true 为转到根目录下的默认主页,false 为转到子目录下的默认主页 IndexDocument indexDocument("index.html", true); // 设置错误页面为 error.html ErrorDocument errorDocument("error.html"); // 设置路由规则 // 设置匹配条件:只有匹配此前缀 website 才能匹配此规则。访问指定 Object 时,返回此 status 为 404 才能匹配此规则 RoutingRuleCondition condition("website", 404); // 设置跳转规则: // 方法支持 HTTP 和 HTTPS // 跳转时的域名为 www.volcengine.com // 跳转时 Object 名称的前缀将替换成 voc,可以为空 // 跳转时返回的状态码为 301 RoutingRuleRedirect redirect(ProtocolType::Http, "www.volcengine.com", "voc", 301); RoutingRule rule(condition, redirect); input.setIndexDocument(indexDocument); input.setErrorDocument(errorDocument); input.setRoutingRules({rule}); auto output = client.putBucketWebsite(input); if (!output.isSuccess()) { // 异常处理 std::cout << "PutBucketWebsite failed." << output.error().String() << std::endl; // 释放网络等资源 CloseClient(); return -1; } std::cout << "PutBucketWebsite success." << std::endl; // 释放网络等资源 CloseClient(); return 0; }
注意
要获取桶的网站配置规则,默认您必须为桶所有者。
以下代码用于获取桶 examplebucket 的网站配置规则。
#include "TosClientV2.h" using namespace VolcengineTos; int main(void){ // 初始化 TOS 账号信息 // Your Region 填写 Bucket 所在 Region std::string region = "Your Region"; std::string accessKey = std::getenv("TOS_ACCESS_KEY"); std::string secretKey = std::getenv("TOS_SECRET_KEY"); // 填写 Bucket 名称,例如 examplebucket std::string bucketName = "examplebucket"; // 初始化网络等资源 InitializeClient(); // 创建交互的 client TosClientV2 client(region, accessKey, secretKey); GetBucketWebsiteInput input(bucketName); auto output = client.getBucketWebsite(input); if (!output.isSuccess()) { // 异常处理 std::cout << "GetBucketWebsite failed." << output.error().String() << std::endl; // 释放网络等资源 CloseClient(); return -1; } std::cout << "GetBucketWebsite success." << std::endl; auto res = output.result(); if (res.getRedirectAllRequestsTo() != nullptr){ auto redirectAllRequestsTo= *res.getRedirectAllRequestsTo(); std::cout << "host name:" << redirectAllRequestsTo.getHostName() << std::endl; std::cout << "protocol:" << redirectAllRequestsTo.getProtocol() << std::endl; } if (res.getIndexDocument() != nullptr){ auto indexDocument = *res.getIndexDocument(); std::cout << "indexDocument suffix:" << indexDocument.getSuffix() << std::endl; std::cout << "indexDocument forbidden subdir:" << indexDocument.isForbiddenSubDir() << std::endl; } if (res.getErrorDocument() != nullptr){ auto errorDocument = *res.getErrorDocument(); std::cout << "error document key:" << errorDocument.getKey() << std::endl; } for (const auto& rule : output.result().getRoutingRules()) { auto condition = rule.getCondition(); auto redirect = rule.getRedirect(); std::cout << "Condition:" << std::endl; std::cout << "KeyPrefixEquals:" << condition.getKeyPrefixEquals() << std::endl; std::cout << "HttpErrorCodeReturnedEquals:" << condition.getHttpErrorCodeReturnedEquals() << std::endl; std::cout << "Redirect:" << std::endl; std::cout << "HostName:" << redirect.getHostName() << std::endl; std::cout << "ReplaceKeyPrefixWith:" << redirect.getReplaceKeyPrefixWith() << std::endl; std::cout << "ProtocolType:" << redirect.getStringFormatProtocol() << std::endl; std::cout << "HttpRedirectCode:" << redirect.getHttpRedirectCode() << std::endl; std::cout << "ReplaceKeyWith:" << redirect.getReplaceKeyWith() << std::endl; } // 释放网络等资源 CloseClient(); return 0; }
注意
要删除桶的网站配置规则,默认您必须为桶所有者。
以下代码用于删除桶 examplebucket 的网站配置规则。
#include "TosClientV2.h" using namespace VolcengineTos; int main(void){ // 初始化 TOS 账号信息 // Your Region 填写 Bucket 所在 Region std::string region = "Your Region"; std::string accessKey = std::getenv("TOS_ACCESS_KEY"); std::string secretKey = std::getenv("TOS_SECRET_KEY"); // 填写 Bucket 名称,例如 examplebucket std::string bucketName = "examplebucket"; // 初始化网络等资源 InitializeClient(); // 创建交互的 client TosClientV2 client(region, accessKey, secretKey); DeleteBucketWebsiteInput input(bucketName); auto output = client.deleteBucketWebsite(input); if (!output.isSuccess()) { // 异常处理 std::cout << "DeleteBucketWebsite failed." << output.error().String() << std::endl; // 释放网络等资源 CloseClient(); return -1; } std::cout << "DeleteBucketWebsite success." << std::endl; // 释放网络等资源 CloseClient(); return 0; }
关于设置静态网站配置的更多信息,请参见设置静态网站。