最近更新时间:2021-12-24
使用PutBucketWebsite接口设置在website子资源中指定的网站的配置。
要将存储桶配置为网站,您可以在存储桶中将此子资源添加到网站配置信息中,例如索引文档的文件名和任何重定向规则。
此PUT操作需要S3:PutBucketWebsite许可。默认情况下,只有存储桶拥有者可以配置website连接到存储桶的附件;但是,存储桶拥有者可以website通过编写授予他们S3:PutBucketWebsite权限的存储桶策略来允许其他用户设置配置。
PUT /?website HTTP/1.1 Host: examplebucket.region.unicloudsrv.com Content-MD5: ContentMD5 <?xml version="1.0" encoding="UTF-8"?> <WebsiteConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <ErrorDocument> <Key>string</Key> </ErrorDocument> <IndexDocument> <Suffix>string</Suffix> </IndexDocument> <RedirectAllRequestsTo> <HostName>string</HostName> <Protocol>string</Protocol> </RedirectAllRequestsTo> <RoutingRules> <RoutingRule> <Condition> <HttpErrorCodeReturnedEquals>string</HttpErrorCodeReturnedEquals> <KeyPrefixEquals>string</KeyPrefixEquals> </Condition> <Redirect> <HostName>string</HostName> <HttpRedirectCode>string</HttpRedirectCode> <Protocol>string</Protocol> <ReplaceKeyPrefixWith>string</ReplaceKeyPrefixWith> <ReplaceKeyWith>string</ReplaceKeyWith> </Redirect> </RoutingRule> </RoutingRules> </WebsiteConfiguration> |
参数 | 描述 |
Content-MD5 | 经过base64编码的128位MD5摘要。您必须将此标头用作消息完整性检查,以验证请求正文在传输过程中没有损坏。 |
您可以使用网站配置将所有请求重定向到存储桶的网站端点,也可以添加仅重定向特定请求的路由规则。
要将所有发送到存储桶网站端点的网站请求重定向,请添加包含以下元素的网站配置。由于所有请求都发送到另一个网站,因此您无需提供存储桶的索引文档名称。
名称 | 描述 | 需要 |
WebsiteConfiguration | 网站配置的根元素
| 是 |
RedirectAllRequestsTo | 描述对此存储桶的网站端点的每个请求的重定向行为。如果存在此元素,则不允许其他同级。
| 是 |
HostName | 将重定向请求的主机的名称。
| 是 |
Protocol | 重定向请求时使用的协议(http,https)。默认值为原始请求中使用的协议。
| 否 |
如果要对重定向进行精细控制,则可以使用以下元素添加路由规则,这些规则描述了重定向请求的条件以及有关重定向目标的信息。在这种情况下,网站配置必须为存储桶提供索引文档,因为某些请求可能不会重定向。
名称 | 描述 | 需要 |
WebsiteConfiguration | 请求的容器
| 是 |
IndexDocument | Suffix 元素的容器。
| 是 |
Suffix | 后缀附加到网站端点目录请求(例如,如果后缀是index.html且您向发出请求)samplebucket/images/,返回的数据将用于键名称为images /的对象index.html)后缀不能为空,并且不能包含斜杠字符。
| 是 |
ErrorDocument | Key元素的容器
| 没有 |
Key | 发生4XX类错误时要使用的对象密钥名称。该键标识发生此类错误时返回的页面。
| 有条件的 |
RoutingRules | 用于路由规则元素集合的容器。
| 没有 |
RoutingRule | 一个路由规则的容器,用于标识条件和在满足条件时应用的重定向。
| 是 |
Condition | 一个容器,用于描述要应用指定的重定向必须满足的条件。例如:如果请求的是/docs文件夹中的页面,请重定向到该/documents文件夹。如果请求导致HTTP错误4xx,请将请求重定向到可能处理该错误的其他主机。
| 没有 |
KeyPrefixEquals | 应用重定向时的对象键名称前缀。例如,要重定向的请求ExamplePage.html,键前缀将为 ExamplePage.html。要重定向带有前缀的所有页面的请求docs/,键前缀将为/docs,它标识docs/ 文件夹中的所有对象。
| 有条件的 |
HttpErrorCodeReturnedEquals | 应用重定向时的HTTP错误代码。如果发生错误,如果错误代码等于该值,则将应用指定的重定向。
| 有条件的 |
Redirect | 重定向信息的容器。您可以将请求重定向到另一个主机,另一个页面或另一个协议。如果发生错误,您可以指定其他错误代码以返回。
| 是 |
Protocol | 在重定向请求中使用的协议。
| 没有 |
HostName | 在重定向请求中使用的主机名。
| 没有 |
ReplaceKeyPrefixWith | 在重定向请求中使用的对象密钥前缀。例如,重定向与前缀的所有页面的请求docs/(该对象中的docs/文件夹中)documents/,你可以设置一个 condition与块 KeyPrefixEquals设置为 docs/和中Redirect集 ReplaceKeyPrefixWith来 /documents。
| 没有 |
ReplaceKeyWith | 在重定向请求中使用的特定对象密钥。例如,将请求重定向到error.html。
| 没有 |
HttpRedirectCode | 在响应上使用的HTTP重定向代码。
| 没有 |
无
PUT ?website HTTP/1.1 Host: examplebucket.region.unicloudsrv.com Content-Length: 256 Date: Thu, 27 Jan 2011 12:00:00 GMT Authorization: signatureValue
<WebsiteConfiguration xmlns='http://s3.amazonaws.com/doc/2006-03-01/'> <IndexDocument> <Suffix>index.html</Suffix> </IndexDocument> <ErrorDocument> <Key>SomeErrorDocument.html</Key> </ErrorDocument> </WebsiteConfiguration> |
返回以下示例响应。
HTTP/1.1 200 OK x-amz-request-id: 80CD4368BD211111 Date: Thu, 27 Jan 2011 00:00:00 GMT Content-Length: 0 |
PUT ?website HTTP/1.1 Host: examplebucket.region.unicloudsrv.com Content-Length: length-value Date: Thu, 27 Jan 2011 12:00:00 GMT Authorization: signatureValue
<WebsiteConfiguration xmlns='http://s3.amazonaws.com/doc/2006-03-01/'> <RedirectAllRequestsTo> <HostName>example.com</HostName> </RedirectAllRequestsTo> </WebsiteConfiguration> |
返回以下示例响应。
HTTP/1.1 200 OK x-amz-request-id: 80CD4368BD211111 Date: Thu, 27 Jan 2011 12:00:00 GMT Content-Length: 0 |
您可以通过添加重定向对一个或多个对象的请求的路由规则来进一步自定义网站配置。例如,假设您的存储桶包含以下对象:
index.html
docs / article1.html
docs / article2.html
如果您决定将文件夹从重命名docs/为documents/,则需要将前缀请求重定向/docs到 documents/。例如,对的请求 docs/article1.html将需要重定向到 documents/article1.html。
在这种情况下,您将更新网站配置并添加路由规则,如以下请求所示:
PUT ?website HTTP/1.1 Host: examplebucket.region.unicloudsrv.com Content-Length: length-value Date: Thu, 27 Jan 2011 12:00:00 GMT Authorization: signatureValue
<WebsiteConfiguration xmlns='http://s3.amazonaws.com/doc/2006-03-01/'> <IndexDocument> <Suffix>index.html</Suffix> </IndexDocument> <ErrorDocument> <Key>Error.html</Key> </ErrorDocument>
<RoutingRules> <RoutingRule> <Condition> <KeyPrefixEquals>docs/</KeyPrefixEquals> </Condition> <Redirect> <ReplaceKeyPrefixWith>documents/</ReplaceKeyPrefixWith> </Redirect> </RoutingRule> </RoutingRules> </WebsiteConfiguration> |
返回以下示例响应。
HTTP/1.1 200 OK x-amz-request-id: 80CD4368BD211111 Date: Thu, 27 Jan 2011 12:00:00 GMT Content-Length: 0 |
您可以使用路由规则来指定检查特定HTTP错误代码的条件。当页面请求导致此错误时,您可以选择重新路由请求。例如,您可以将请求路由到另一个主机,并选择处理错误。发生HTTP错误404时,以下请求中的路由规则会将请求重定向到云主机实例。为说明起见,重定向还在重定向中插入了对象关键字前缀report-404/。例如,如果您请求一个页面ExamplePage.html并导致HTTP 404错误,则该请求将路由到一个页面report-404/testPage.html在指定的云主机实例上。如果没有路由规则,并且发生HTTP错误404,则将Error.html返回该错误 。
PUT ?website HTTP/1.1 Host: examplebucket.region.unicloudsrv.com Content-Length: 580 Date: Thu, 27 Jan 2011 12:00:00 GMT Authorization: signatureValue
<WebsiteConfiguration xmlns='http://s3.amazonaws.com/doc/2006-03-01/'> <IndexDocument> <Suffix>index.html</Suffix> </IndexDocument> <ErrorDocument> <Key>Error.html</Key> </ErrorDocument>
<RoutingRules> <RoutingRule> <Condition> <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals > </Condition> <Redirect> <HostName>ec2-11-22-333-44.compute-1.amazonaws.com</HostName> <ReplaceKeyPrefixWith>report-404/</ReplaceKeyPrefixWith> </Redirect> </RoutingRule> </RoutingRules> </WebsiteConfiguration> |
假设您的存储桶中包含以下页面:
images / photo1.jpg
images / photo2.jpg
images / photo3.jpg
现在,您希望将所有带有images/前缀的页面的请求路由 到单个页面errorpage.html。您可以使用以下请求中显示的路由规则将网站配置添加到存储桶:
PUT ?website HTTP/1.1 Host: examplebucket.region.unicloudsrv.com Content-Length: 481 Date: Thu, 27 Jan 2011 12:00:00 GMT Authorization: signatureValue
<WebsiteConfiguration xmlns='http://s3.amazonaws.com/doc/2006-03-01/'> <IndexDocument> <Suffix>index.html</Suffix> </IndexDocument> <ErrorDocument> <Key>Error.html</Key> </ErrorDocument>
<RoutingRules> <RoutingRule> <Condition> <KeyPrefixEquals>images/</KeyPrefixEquals> </Condition> <Redirect> <ReplaceKeyWith>errorpage.html</ReplaceKeyWith> </Redirect> </RoutingRule> </RoutingRules> </WebsiteConfiguration> |