更新时间:2023-12-20 GMT+08:00

设置托管配置

开发过程中,您有任何问题可以在github上提交issue

您可以通过set_bucket_website_configuration设置桶的托管配置。

配置默认主页错误页面和重定向规则

以下代码展示了如何配置默认主页、错误页面和重定向规则,参数描述如下表:

字段名

类型

约束

说明

option

请求桶的上下文,配置option

必选

桶参数。

set_bucket_redirect_all

obs_set_bucket_redirect_all_conf *

必选

描述重定向的配置。

set_bucket_redirect_all->host_name

const char *

必选

描述重定向的站点名。

set_bucket_redirect_all->protocol

const char *

可选

描述重定向请求时使用的协议(http,https),默认使用http协议。

set_bucket_website_conf

obs_set_bucket_website_conf *

必选

描述重定向规则website元素的配置。

set_bucket_website_conf->suffix

const char *

必选

suffix元素被追加在对文件夹的请求的末尾(例如:suffix配置的是“index.html”,请求的是“samplebucket/images/”,返回的数据将是“samplebucket”桶内名为“images/index.html”的对象的内容)。suffix元素不能为空或者包含“/”字符。

set_bucket_website_conf->key

const char *

可选

当4XX错误出现时使用的对象的名称。这个元素指定了当错误出现时返回的页面。

set_bucket_website_conf->routingrule_info

bucket_website_routingrule *

可选

重定向规则的具体描述,请参看下表

set_bucket_website_conf->routingrule_count

int

可选

set_bucket_website_conf.routingrule_info的总大小

handler

obs_response_handler*

必选

回调函数。

callback_data

void *

可选

回调数据。

重定向规则结构bucket_website_routingrule描述如下表:

字段名

类型

约束

说明

key_prefix_equals

const char *

可选

描述当重定向生效时对象名的前缀。

http_errorcode_returned_equals

const char *

可选

描述重定向生效时的HTTP错误码。当发生错误时,如果错误码等于这个值,那么重定向生效。

protocol

const char *

可选

描述重定向请求时使用的协议。

host_name

const char *

可选

描述重定向请求时使用的站点名。

replace_key_prefix_with

const char *

可选

描述重定向请求时使用的对象名前缀。

replace_key_with

const char *

可选

描述重定向请求时使用的对象名。

http_redirect_code

const char *

可选

描述响应中的HTTP状态码。

static void test_set_bucket_website_configuration()
{
    obs_status ret_status = OBS_STATUS_BUTT;
    // 创建并初始化option
    obs_options option;
    init_obs_options(&option);
    option.bucket_options.host_name = "<your-endpoint>";
    option.bucket_options.bucket_name = "<Your bucketname>";

    // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY。
    // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/intl/zh-cn/usermanual-ca/ca_01_0003.html
    option.bucket_options.access_key = getenv("ACCESS_KEY_ID");
    option.bucket_options.secret_access_key = getenv("SECRET_ACCESS_KEY");

    obs_set_bucket_website_conf set_bucket_website_conf; 
    // 配置默认主页
    set_bucket_website_conf.suffix = "index.html";
    // 配置错误页面 
    set_bucket_website_conf.key = "Error.html";
    // 定义重定向规则 
    set_bucket_website_conf.routingrule_count = 2; 
    bucket_website_routingrule temp[2];
    memset(&temp[0], 0, sizeof(bucket_website_routingrule));
    memset(&temp[1], 0, sizeof(bucket_website_routingrule));
    set_bucket_website_conf.routingrule_info = temp; 
    temp[0].key_prefix_equals = "key_prefix1"; 
    temp[0].replace_key_prefix_with = "replace_key_prefix1"; 
    temp[0].http_errorcode_returned_equals="404"; 
    temp[0].http_redirect_code = NULL; 
    temp[0].host_name = "www.example.com"; 
    temp[0].protocol = "http"; 
    temp[1].key_prefix_equals = "key_prefix2"; 
    temp[1].replace_key_prefix_with = "replace_key_prefix2"; 
    temp[1].http_errorcode_returned_equals="404"; 
    temp[1].http_redirect_code = NULL; 
    temp[1].host_name = "www.example.com"; 
    temp[1].protocol = "http"; 
    // 设置响应回调函数
    obs_response_handler response_handler =
    { 
        0,
        &response_complete_callback
    };
    // 设置重定向规则
    set_bucket_website_configuration(&option, NULL, &set_bucket_website_conf, 
        &response_handler, &ret_status);
    if (OBS_STATUS_OK == ret_status) {
        printf("set bucket website conf successfully. \n");
    }
    else
    {
        printf("set bucket website conf failed(%s).\n", obs_get_status_name(ret_status));
    }
}

配置所有请求重定向

以下代码展示了如何配置所有请求重定向:

static void test_set_bucket_website_all()
{
    obs_status ret_status = OBS_STATUS_BUTT;
    // 创建并初始化option
    obs_options option;
    init_obs_options(&option);
    option.bucket_options.host_name = "<your-endpoint>";
    option.bucket_options.bucket_name = "<Your bucketname>";

    // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY。
    // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/intl/zh-cn/usermanual-ca/ca_01_0003.html
    option.bucket_options.access_key = getenv("ACCESS_KEY_ID");
    option.bucket_options.secret_access_key = getenv("SECRET_ACCESS_KEY");
    // 设置响应回调函数
    obs_response_handler response_handler =
    { 
        0, &response_complete_callback
    };
    // 设置所有请求重定向
    obs_set_bucket_redirect_all_conf set_bucket_redirect_all;
    set_bucket_redirect_all.host_name = "www.example.com";
    set_bucket_redirect_all.protocol = "https";
    set_bucket_website_configuration(&option, &set_bucket_redirect_all, NULL, 
        &response_handler, &ret_status);
    if (OBS_STATUS_OK == ret_status) {
        printf("set bucket website all successfully. \n");
    }
    else
    {
        printf("set bucket website all failed(%s).\n", obs_get_status_name(ret_status));
    }
}