

# 启用网站托管
<a name="EnableWebsiteHosting"></a>

将存储桶配置为静态网站时，您必须启用静态网站托管、配置索引文档和设置权限。

您可以使用 Amazon S3 控制台、REST API、AWS SDK、AWS CLI 或 CloudFormation 启用静态网站托管。

要使用自定义域配置您的网站，请参阅 [教程：使用注册到 Route 53 的自定义域配置静态网站](website-hosting-custom-domain-walkthrough.md)。

## 使用 S3 控制台
<a name="HowDoIWebsiteConfiguration"></a>

**启用静态网站托管**

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在左侧导航窗格中，选择**通用存储桶**。

1. 在存储桶列表中，选择要为其启用静态网站托管的存储桶的名称。

1. 选择**属性**。

1. 在**静态网站托管**下，请选择**编辑**。

1. 请选择**使用此存储桶托管网站**。

1. 在**静态网站托管**下，请选择**启用**。

1. 在 **Index document (索引文档)** 中，输入索引文档的文件名，通常为 `index.html`。

   索引文档名称区分大小写，并且必须与您计划上传到 S3 存储桶的 HTML 索引文档的文件名完全匹配。当您为网站托管配置存储桶时，您必须指定索引文档。当对根域或任何子文件夹发出请求时，Amazon S3 将返回此索引文档。有关更多信息，请参阅 [配置索引文档](IndexDocumentSupport.md)。

1. 要为 4XX 类错误提供您自己的自定义错误文档，请在**错误文档**中输入自定义错误文档文件名。

   错误文档名称区分大小写，并且必须与您计划上传到 S3 存储桶的 HTML 错误文档的文件名完全匹配。如果未指定自定义错误文档并发生错误，Amazon S3 返回默认 HTML 错误文档。有关更多信息，请参阅 [配置自定义错误文档](CustomErrorDocSupport.md)。

1. （可选）如果要指定高级重定向规则，请在 **Redirection rules**（重定向规则）中，输入 JSON 来描述规则。

   例如，您可以根据请求中的特定对象键名或前缀按条件路由请求。有关更多信息，请参阅 [配置重新导向规则以使用高级条件重新导向](how-to-page-redirect.md#advanced-conditional-redirects)。

1. 选择 **Save changes（保存更改）**。

   Amazon S3 为您的存储桶启用静态网站托管。在页面底部的**静态网站托管**下，您可以看到存储桶的网站端点。

1. 在**静态网站托管**下，记下**端点**。

   **端点**是存储桶的 Amazon S3 网站端点。将存储桶配置为静态网站后，您可以使用此端点来测试您的网站。

## 使用 REST API
<a name="ConfigWebSiteREST"></a>

有关直接发送 REST 请求以启用静态网站托管的更多信息，请参阅《Amazon Simple Storage Service API 参考》中的以下部分：
+ [PUT Bucket website](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTwebsite.html)
+ [GET Bucket website](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETwebsite.html)
+ [DELETE Bucket website](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketDELETEwebsite.html)

## 使用 AWS SDK
<a name="ManagingBucketWebsiteConfig"></a>

若要在 Amazon S3 上托管静态网站，需要为网站托管配置 Amazon S3 存储桶，然后将您的网站内容上传到该存储桶。您还可以使用 AWS SDK 以编程方式创建、更新和删除网站配置。SDK 围绕 Amazon S3 REST API 提供封装类。如果应用程序需要它，可以直接从应用程序发送 REST API 请求。

------
#### [ .NET ]

以下示例说明如何使用 适用于 .NET 的 AWS SDK 管理存储桶的网站配置。要将网站配置添加到存储桶，请提供存储桶名称和网站配置。网站配置必须包含索引文档，并且可包含可选的错误文档。这些文档必须存储在存储桶中。有关更多信息，请参阅 [PUT Bucket 网站](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTwebsite.html)。有关 Amazon S3 网站功能的更多信息，请参阅 [使用 Amazon S3 托管静态网站](WebsiteHosting.md)。

以下 C\$1 代码示例将网站配置添加到指定的存储桶。该配置指定索引文档和错误文档名称。有关设置和运行代码示例的信息，请参阅《适用于 .NET 的 AWS SDK 开发人员指南》**中的[适用于 .NET 的 AWS SDK 入门](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html)。

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class WebsiteConfigTest
    {
        private const string bucketName = "*** bucket name ***";
        private const string indexDocumentSuffix = "*** index object key ***"; // For example, index.html.
        private const string errorDocument = "*** error object key ***"; // For example, error.html.
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 client;
        public static void Main()
        {
            client = new AmazonS3Client(bucketRegion);
            AddWebsiteConfigurationAsync(bucketName, indexDocumentSuffix, errorDocument).Wait();
        }

        static async Task AddWebsiteConfigurationAsync(string bucketName,
                                            string indexDocumentSuffix,
                                            string errorDocument)
        {
            try
            {
                // 1. Put the website configuration.
                PutBucketWebsiteRequest putRequest = new PutBucketWebsiteRequest()
                {
                    BucketName = bucketName,
                    WebsiteConfiguration = new WebsiteConfiguration()
                    {
                        IndexDocumentSuffix = indexDocumentSuffix,
                        ErrorDocument = errorDocument
                    }
                };
                PutBucketWebsiteResponse response = await client.PutBucketWebsiteAsync(putRequest);

                // 2. Get the website configuration.
                GetBucketWebsiteRequest getRequest = new GetBucketWebsiteRequest()
                {
                    BucketName = bucketName
                };
                GetBucketWebsiteResponse getResponse = await client.GetBucketWebsiteAsync(getRequest);
                Console.WriteLine("Index document: {0}", getResponse.WebsiteConfiguration.IndexDocumentSuffix);
                Console.WriteLine("Error document: {0}", getResponse.WebsiteConfiguration.ErrorDocument);
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
        }
    }
}
```

------
#### [ PHP ]

以下 PHP 示例将网站配置添加到指定的存储桶。`create_website_config` 方法显式提供索引文档和错误文档名称。该示例还检索网站配置并输出响应。有关 Amazon S3 网站功能的更多信息，请参阅 [使用 Amazon S3 托管静态网站](WebsiteHosting.md)。

有关适用于 Ruby 的 AWS 开发工具包 API 的更多信息，请转到[适用于 Ruby 的 AWS 开发工具包 – 版本 2](https://docs.aws.amazon.com/sdkforruby/api/index.html)。

```
 require 'vendor/autoload.php';

use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';

$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1'
]);


// Add the website configuration.
$s3->putBucketWebsite([
    'Bucket'                => $bucket,
    'WebsiteConfiguration'  => [
        'IndexDocument' => ['Suffix' => 'index.html'],
        'ErrorDocument' => ['Key' => 'error.html']
    ]
]);

// Retrieve the website configuration.
$result = $s3->getBucketWebsite([
    'Bucket' => $bucket
]);
echo $result->getPath('IndexDocument/Suffix');

// Delete the website configuration.
$s3->deleteBucketWebsite([
    'Bucket' => $bucket
]);
```

------

## 使用 AWS CLI
<a name="enabling-website-cli"></a>

有关使用 AWS CLI 将 S3 存储桶配置为静态网站的更多信息，请参阅《*AWS CLI 命令参考*》中的[网站](https://docs.aws.amazon.com/cli/latest/reference/s3/website.html)。

接下来，您必须配置索引文档并设置权限。有关信息，请参阅 [配置索引文档](IndexDocumentSupport.md) 和 [设置访问网站的权限](WebsiteAccessPermissionsReqd.md)。

还可以有选择性地配置[错误文档](CustomErrorDocSupport.md)、[Web 流量日志记录](LoggingWebsiteTraffic.md)或[重定向](how-to-page-redirect.md)。