Amazon Simple Storage Service
开发人员指南 (API Version 2006-03-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

(可选) 配置网页重定向

如果为网站托管配置了 Amazon S3 存储桶,则可以将对某个对象的请求重定向到同一存储桶中的其他对象或重定向到外部 URL。

您可以通过将 x-amz-website-redirect-location 属性添加到对象元数据来设置重定向。 然后,该网站将把对象当作 301 重定向。要重定向对其他对象的请求,您可以将重定向位置设置为目标对象的键。要重定向对外部 URL 的请求,您可以将重定向位置设置为所需的 URL。有关对象元数据的更多信息,请参阅 系统定义的元数据

为网站托管配置的存储桶具有网站终端节点和 REST 终端节点。对配置为 301 重定向的页面的请求具有以下可能的结果,具体取决于请求的终端节点:

  • 特定于区域的网站终端节点 – Amazon S3 根据 x-amz-website-redirect-location 属性的值重定向页面请求。

  • REST 终端节点 – Amazon S3 不重定向页面请求。它将返回请求的对象。

有关终端节点的更多信息,请参阅 Amazon 网站和 REST API 终端节点之间的主要差异

您可从 Amazon S3 控制台或使用 Amazon S3 REST API 设置页面重定向.

Amazon S3 控制台中的页面重定向支持

您可以使用 Amazon S3 控制台在对象的元数据中设置网站重定向位置。当您设置页面重定向时,您可以保留或删除源对象内容。例如,假设您的存储桶中有 page1.html 对象。要将对此页面的任何请求重定向到另一个对象 page2.html,您可以执行以下操作之一:

  • 要保留 page1.html 对象的内容并仅重定向页面请求,请选择 page1.html 对象。

     page1.html 对象处于突出显示状态的“Objects”选项卡

    选择 page1.html属性选项卡,然后选择元数据框。如以下示例所示,将 Website Redirect Location 添加到元数据,然后将其值设置为 /page2.html。需要该值中的 / 前缀。

     包含网站重定向位置值的“Metadata”框

    您也可以将该值设置为外部 URL,例如 http://www.example.com。例如,如果您的根域为 example.com,并且您要为 http://example.comhttp://www.example.com 的请求服务,则可以创建两个分别名为 example.comwww.example.com 的存储桶。然后,将内容保留在其中一个存储桶中 (例如 example.com),然后配置另一个存储桶以将所有请求重定向至 example.com 存储桶。

  • 要删除 page1.html 对象的内容并重定向请求,您可以使用相同的键上传新的零字节对象 page1.html 来替换现有对象,然后在上传过程中为 page1.html 指定 Website Redirect Location。有关上传对象的信息,请参阅 Amazon Simple Storage Service 控制台用户指南 中的上传 S3 对象

从 REST API 设置页面重定向

以下 Amazon S3 API 操作支持请求中的 x-amz-website-redirect-location 标头。Amazon S3 将对象元数据中的标头值存储为 x-amz-website-redirect-location

设置页面重定向时,您可以保留或删除对象内容。例如,假设您在您的存储桶中具有 page1.html 对象。

  • 要保留 page1.html 的内容并仅重定向页面请求,您可以提交 PUT Object – Copy 请求来创建新的 page1.html 对象,该对象使用现有 page1.html 对象作为源。在您的请求中,您可以设置 x-amz-website-redirect-location 标头。当请求完成时,您将拥有未更改内容的原始页面,但 Amazon S3 会将对该页面的任何请求重定向到指定的重定向位置。

  • 要删除 page1.html 对象的内容并重定向对该页面的请求,您可以发送 PUT Object 请求,以上传具有相同对象键的零字节对象 page1.html。在 PUT 请求中,您可以将 page1.htmlx-amz-website-redirect-location 设置为新对象。当请求完成时,page1.html 将不包含任何内容,且后续请求将被重定向到由 x-amz-website-redirect-location 指定的位置。

当使用 GET Object 操作以及其他对象元数据检索该对象时,Amazon S3 在响应中返回 x-amz-website-redirect-location 标头。

高级条件重定向

利用高级重定向规则,您可以根据特定对象键名称、请求中的前缀或者响应代码来按条件路由请求。例如,假设您在存储桶中删除或重命名了某个对象。您可以添加一个将请求重定向到其他对象的路由规则。如果您要使文件夹不可用,则可以添加路由规则将请求重定向至其他网页。处理错误时,您还可以通过将返回错误的请求路由到其他域来添加一个处理错误条件的路由规则。

为网站托管配置存储桶时,您可以选择指定高级重定向规则。

 显示可选重定向规则的“Static website hosting”屏幕

要将对存储桶网站终端节点的所有请求重定向至其他主机,只需提供主机名。

 “redirect requests”处于选中状态的“Static website hosting”屏幕

您使用 XML 描述规则。下一节提供了指定重定向规则的一般语法和示例。

用于指定路由规则的语法

以下是在网站配置中定义路由规则的一般语法:

Copy
<RoutingRules> = <RoutingRules> <RoutingRule>...</RoutingRule> [<RoutingRule>...</RoutingRule> ...] </RoutingRules> <RoutingRule> = <RoutingRule> [ <Condition>...</Condition> ] <Redirect>...</Redirect> </RoutingRule> <Condition> = <Condition> [ <KeyPrefixEquals>...</KeyPrefixEquals> ] [ <HttpErrorCodeReturnedEquals>...</HttpErrorCodeReturnedEquals> ] </Condition> Note: <Condition> must have at least one child element. <Redirect> = <Redirect> [ <HostName>...</HostName> ] [ <Protocol>...</Protocol> ] [ <ReplaceKeyPrefixWith>...</ReplaceKeyPrefixWith> ] [ <ReplaceKeyWith>...</ReplaceKeyWith> ] [ <HttpRedirectCode>...</HttpRedirectCode> ] </Redirect> Note: <Redirect> must have at least one child element. Also, you can have either ReplaceKeyPrefix with or ReplaceKeyWith, but not both.

下表描述了路由规则中的元素。

名称 描述
RoutingRules 用于收集 RoutingRule 元素的容器。
RoutingRule

标识在满足条件时应用的条件和重定向的规则。

条件:RoutingRules 容器必须包含至少一个路由规则。

Condition

对于要应用的指定的重定向,用于描述必须满足的条件的容器。如果路由规则不包含条件,则该规则将应用于所有请求。

KeyPrefixEquals

从中重定向请求的对象键名称的前缀。

KeyPrefixEquals如果未指定 HttpErrorCodeReturnedEquals,则需要 。如果同时指定 KeyPrefixEqualsHttpErrorCodeReturnedEquals,则两者都必须为真才能满足条件。

HttpErrorCodeReturnedEquals

要应用的重定向必须匹配的 HTTP 错误代码。如果出现错误,并且错误代码满足此值,则应用指定的重定向。

HttpErrorCodeReturnedEquals如果未指定 KeyPrefixEquals,则需要 。如果同时指定 KeyPrefixEqualsHttpErrorCodeReturnedEquals,则两者都必须为真才能满足条件。

Redirect

提供用于重定向请求的说明的容器元素。您可以将请求重定向到其他主机或其他页面,或者也可以指定要使用的其他协议。RoutingRule 必须具有 Redirect 元素。Redirect 元素必须至少包含以下一个同级元素:ProtocolHostNameReplaceKeyPrefixWithReplaceKeyWithHttpRedirectCode

Protocol

将在响应中返回的 Location 标头中使用的协议 (HTTP 或 HTTPS)。

如果提供了一个同级,则 Protocol 不是必需的。

HostName

可在响应中返回的位置标头中使用的主机名。

如果提供了一个同级,则 HostName 不是必需的。

ReplaceKeyPrefixWith

将替换重定向请求中的 KeyPrefixEquals 值的对象键名称的前缀。

如果提供了一个同级,则 ReplaceKeyPrefixWith 不是必需的。仅在不提供 ReplaceKeyWith 时提供它。

ReplaceKeyWith

可在响应中返回的位置标头中使用的对象键。

如果提供了一个同级,则 ReplaceKeyWith 不是必需的。仅在不提供 ReplaceKeyPrefixWith 时提供它。

HttpRedirectCode

可在响应中返回的位置标头中使用的 HTTP 重定向代码。

如果提供了一个同级,则 HttpRedirectCode 不是必需的。

以下示例介绍了常见的重定向任务:

例 1:保留键前缀后进行重定向

假设您的存储桶包含以下对象:

  • index.html

  • docs/article1.html

  • docs/article2.html

您决定将文件夹从 docs/ 重命名为 documents/。做出此更改后,您需要将对前缀 docs/ 的请求重定向至 documents/。例如,对 docs/article1.html 的请求将重定向至 documents/article1.html

在这种情况下,您可以以下路由规则添加到网站配置:

Copy
<RoutingRules> <RoutingRule> <Condition> <KeyPrefixEquals>docs/</KeyPrefixEquals> </Condition> <Redirect> <ReplaceKeyPrefixWith>documents/</ReplaceKeyPrefixWith> </Redirect> </RoutingRule> </RoutingRules>

例 2:将对已删除文件夹的请求重定向到页面

假设您删除了 images/ 文件夹 (即,删除了具有键前缀 images/ 的所有对象)。您可以添加路由规则以将具有键前缀 images/ 的任何对象的请求重定向至名为 folderdeleted.html 的页。

Copy
<RoutingRules> <RoutingRule> <Condition> <KeyPrefixEquals>images/</KeyPrefixEquals> </Condition> <Redirect> <ReplaceKeyWith>folderdeleted.html</ReplaceKeyWith> </Redirect> </RoutingRule> </RoutingRules>

例 3:为 HTTP 错误进行重定向

假设在未找到请求的对象时,您需要将请求重定向至 Amazon Elastic Compute Cloud (Amazon EC2) 实例。添加重定向规则,以便当返回 HTTP 状态代码 404 (未找到) 时,站点访问者可重定向到将处理该请求的 Amazon EC2 实例。以下示例也将在重定向中插入对象键前缀 report-404/。例如,如果您请求了页面 ExamplePage.html 并且它导致了 HTTP 404 错误,该请求将重定向至指定 Amazon EC2 实例上的 report-404/ExamplePage.html 页面。如果没有路由规则且发生了 HTTP 错误 404,将返回配置中指定的错误文档。

Copy
<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>