301使用CloudFront重定向到特定页面

Cos*_*sta 2 amazon-s3 amazon-web-services amazon-cloudfront

我正在重建我的网站。新的服务器将托管在S3上,并在其前面安装CloudFront。

如何为旧网站上存在的某些URL创建一些重定向,而新网站上不存在?

example.com/thing?id=blah 例如,我要重定向到 othersite.com/other-path

Luk*_*ite 5

您无法在CloudFront中进行重定向,但是由于您的来源是S3,因此您可以在其中进行重定向。

首先,您需要确保正确配置了s3的CloudFront来源。您无法使用标准REST API(这是自动完成选项)进行网站重定向。

输入您的存储桶的Amazon S3静态网站托管终端节点。此值显示在Amazon S3控制台中“静态网站托管”下“属性”页面上。

当您以这种格式指定存储桶名称时,可以使用Amazon S3重定向和Amazon S3自定义错误文档。

(来源:使用Amazon S3来源和自定义来源进行Web分发

接下来,如果您的“重定向自”链接中确实包含需要评估的查询参数,则需要确保将CloudFront配置为转发查询参数。我应该注意,我从未在s3中构建过查询字符串参数键的重定向,但是根据此SO答案应该是可能的。

全部转发,基于全部缓存

如果原始服务器为所有查询字符串参数返回不同版本的对象,请选择此选项。

(来源:查询字符串转发和缓存

最后,使用路由规则为所需的重定向设置S3存储桶。以您的示例为例,它看起来像这样:

<RoutingRules>
  <RoutingRule>
  <Condition>
    <KeyPrefixEquals>thing?id=blah</KeyPrefixEquals>
  </Condition>
  <Redirect>
    <ReplaceKeyWith>other-path</ReplaceKeyWith>
  </Redirect>
  </RoutingRule>
</RoutingRules>
Run Code Online (Sandbox Code Playgroud)

(来源:指定路由规则的语法

引起您注意的最后一点是路由规则本身的语法。放置在您的路由规则上的条件为KeyPrefixEquals。没有KeyEquals可用的条件。

这意味着,例如,如果您有thing?id=blahand thing?id=blah2路由规则,则顺序很重要。放在blah2前面blah,否则您将永远匹配blah

还有许多其他路由规则选项可用,这些选项可让您更改协议,重定向到另一个域而不仅仅是重写路径等。有关更多信息,请参阅路由规则文档