您可以将存储空间(Bucket)设置为静态网站托管模式并设置镜像回源的跳转规则(RoutingRule)。静态网站托管模式配置生效后,访问网站相当于访问Bucket,并且能够自动跳转至指定的索引页面和错误页面。镜像回源的跳转规则配置生效后,可用于数据无缝迁移到OSS的场景。

静态网站托管

  • 设置静态网站托管

    以下代码用于设置静态网站托管:

    # -*- coding: utf-8 -*-
    import oss2
    from oss2.models import BucketWebsite
    
    # 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
    auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
    # Endpoint以华东1(杭州)为例,其他Region请按实际情况填写。关于其他Region对应的Endpoint信息,请参见访问域名和数据中心。
    # 填写Bucket名称,例如examplebucket。关于Bucket名称命名规范的更多信息,请参见Bucket。
    bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
    
    # 开启静态网站托管模式,并将默认首页设置为index.html,默认404页设置为error.html。
    bucket.put_bucket_website(BucketWebsite('index.html', 'error.html'))            
  • 查看静态网站托管配置

    以下代码用于查看静态网站托管配置:

    # -*- coding: utf-8 -*-
    import oss2
    
    # 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
    auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
    # Endpoint以华东1(杭州)为例,其他Region请按实际情况填写。
    # 填写Bucket名称,例如examplebucket。
    bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
    
    try:
        # 如果指定的Bucket未开启静态网站托管模式,则调用get_bucket_website时会抛出NoSuchWebsite异常。
        website = bucket.get_bucket_website()
        print('Index file is {0}, error file is {1}'.format(website.index_file, website.error_file))
    except oss2.exceptions.NoSuchWebsite as e:
        print('Website is not configured, request_id={0}'.format(e.request_id))           
  • 删除静态网站托管配置

    以下代码用于删除静态网站托管配置:

    # -*- coding: utf-8 -*-
    import oss2
    # 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
    auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
    # Endpoint以华东1(杭州)为例,其他Region请按实际情况填写。
    # 填写Bucket名称,例如examplebucket。
    bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
    
    bucket.delete_bucket_website()           

镜像回源

镜像回源主要用于数据无缝迁移到OSS的场景。例如某服务已经在用户建立的源站或者在其他云产品上运行,现因业务发展,需要将服务迁移至OSS,迁移时需保证服务的正常运行。您可以在迁移过程中使用镜像回源规则获取未迁移至OSS的部分数据,保证服务的正常运行。

  • 设置镜像回源

    例如,当请求者访问目标Bucket中不存在的文件时,可以通过指定回源条件和回源地址,从源站中获取目标文件。例如您在华东1(杭州)有名为examplebucket的Bucket,您希望请求者访问Bucket根目录下examplefolder目录中不存在的文件时,可以从https://www.example.com/站点的examplefolder目录获取目标文件。

    以下代码用于设置符合上述场景的镜像回源规则:

    # -*- coding: utf-8 -*-
    import oss2
    from oss2.models import BucketWebsite
    
    # 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
    auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
    # Endpoint以华东1(杭州)为例,其他Region请按实际情况填写。
    # 填写Bucket名称,例如examplebucket。关于Bucket名称命名规范的更多信息,请参见Bucket。
    bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
    
    # 开启静态网站托管模式,并将默认首页设置为index.html,默认404页设置为error.html。
    index_file = 'index.html'
    error_file = 'error.html'
    # 设置匹配的条件。
    condition1 = Condition(key_prefix_equals='examplefolder',
                           http_err_code_return_equals=404)
    
    # 指定镜像回源时携带的Header。
    mirror_headers_set_1 = MirrorHeadersSet("myheader-key5","myheader-value5")
    mirror_headers_set_2 = MirrorHeadersSet("myheader-key6","myheader-value6")
    set_list = [mirror_headers_set_1, mirror_headers_set_2]
    pass_list = ['myheader-key1', 'myheader-key2']
    remove_list = ['myheader-key3', 'myheader-key4']
    mirror_header = RedirectMirrorHeaders(pass_all=True, pass_list=pass_list, remove_list=remove_list, set_list=set_list)
    # 指定匹配此规则后执行的动作。
    
    redirect1 = Redirect(redirect_type=REDIRECT_TYPE_MIRROR, mirror_url='https://www.example.com/',
                         mirror_pass_query_string=True, mirror_follow_redirect=True, mirror_check_md5=True, mirror_headers=mirror_header)
    
    rule1 = RoutingRule(rule_num=1, condition=condition1, redirect=redirect1)
    
    # 设置镜像回源。
    website_set = BucketWebsite(index_file, error_file, [rule1])
  • 获取镜像回源配置

    以下代码用于获取镜像回源配置:

    # -*- coding: utf-8 -*-
    import oss2
    # 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
    auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
    # Endpoint以华东1(杭州)为例,其他Region请按实际情况填写。
    # 填写Bucket名称,例如examplebucket。
    bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
    
    try:
        # 如果指定的Bucket未开启静态网站托管模式,则调用get_bucket_website时会抛出NoSuchWebsite异常。
        website_get = bucket.get_bucket_website()
        # 获取默认首页。
        print(website_get.index_file)
        # 获取默认404页。
        print(website_get.error_file)
        for rule in website_get.rules:
            print(rule.rule_num)
            # 获取规则匹配的前缀。
            print(rule.condition.key_prefix_equals)
            # 获取HTTP状态码。
            print(rule.condition.http_err_code_return_equals)
            # 获取跳转的类型。
            print(rule.redirect.redirect_type)
            # 获取镜像回源的源站地址。
            print(rule.redirect.mirror_url)
            # 获取携带的请求参数。
            print(rule.redirect.pass_query_string)
            # 获取Redirect时Object名称通过ReplaceKeyWith指定的替换值,ReplaceKeyWith支持变量。
            # print(rule.redirect.replace_key_with)
            # 获取Redirect时Object名称的前缀替换值。如果前缀为空,则将这个字符串插入Object名称的前面。
            # print(rule.redirect.replace_key_prefix_with)
            # 获取跳转时的协议。
            # print(rule.redirect.proto)
            # 获取跳转时的域名。
            # print(rule.redirect.host_name)
            # 获取跳转时返回的状态码。
            # print(rule.redirect.http_redirect_code)
    except oss2.exceptions.NoSuchWebsite as e:
        print('Website is not configured, request_id={0}'.format(e.request_id))
  • 删除镜像回源配置

    以下代码用于删除镜像回源配置:

    # -*- coding: utf-8 -*-
    import oss2
    # 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
    auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
    # Endpoint以华东1(杭州)为例,其他Region请按实际情况填写。
    # 填写Bucket名称,例如examplebucket。
    bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
    
    bucket.delete_bucket_website()           

相关文档

  • 关于设置静态网站或者镜像回源的API接口说明,请参见PutBucketWebsite
  • 关于获取静态网站或者镜像回源的API接口说明,请参见GetBucketWebsite
  • 关于删除静态网站或者镜像回源的API接口说明,请参见DeleteBucketWebsite