【问题标题】:301 Redirect for specific page with CloudFront使用 CloudFront 对特定页面进行 301 重定向
【发布时间】:2017-05-08 08:04:31
【问题描述】:

我正在重建我的网站。新的将托管在 S3 上,前面有 CloudFront。

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

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

【问题讨论】:

  • 您的示例应该同时包含您要重定向的地址和您尝试重定向到的地址。

标签: amazon-web-services amazon-s3 amazon-cloudfront


【解决方案1】:

您不能在 CloudFront 中进行重定向,但由于您的源是 S3,您可以在其中进行重定向。

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

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

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

(来源:Using Amazon S3 Origins and Custom Origins for Web Distributions

接下来,如果您的重定向链接中确实包含您需要评估的查询参数,您需要make sure CloudFront is configured to forward query parameters。我应该注意,我从来不需要在 s3 中构建重定向查询字符串参数的键,但根据this SO answer 应该是可能的。

全部转发,基于全部缓存

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

(来源:Query String Forwarding and Caching

最后,set up your S3 bucket with Routing Rules 用于所需的重定向。鉴于您的示例,它看起来像这样:

<RoutingRules>
  <RoutingRule>
  <Condition>
    <KeyPrefixEquals>thing?id=blah</KeyPrefixEquals>
  </Condition>
  <Redirect>
    <ReplaceKeyWith>other-path</ReplaceKeyWith>
  </Redirect>
  </RoutingRule>
</RoutingRules>

(来源:Syntax for Specifying Routing Rules

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

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

还有许多其他可用的路由规则选项,可让您更改协议、重定向到另一个域,而不仅仅是重写路径等。查看documentation on routing rules 了解更多信息。

【讨论】:

  • 非常彻底!谢谢,卢克!这太棒了:)我现在就去实现它......
  • 我有一些不需要查询字符串的重定向。我已经开始这样做了,但他们没有工作。我只是得到我通常的 404 页面。我想知道这是否是因为我从同一个 S3 存储桶为我的网站提供服务,因为我启用了静态网站托管并列出了这些重定向?我应该为重定向创建一个单独的存储桶吗?
  • 您可能需要:在更改原点后给 CF 更多时间进行更新,或使 /*.您肯定想要同一个存储桶,启用静态网站托管。
  • IIRC,如果没有击中正确的原点,404 将是行为。由于其余 API 不返回重定向,但静态网站托管会。作为第一步,直接尝试使用 s3 网站 URL 来验证您的重定向是否有效。
  • 我现在无效。出于这个原因,我通常将我的开发环境中的路由缓存设置为 30 秒,但也许在行为级别,其他一些东西决定了缓存长度。
猜你喜欢
  • 2023-02-24
  • 2012-10-11
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
  • 2011-11-21
  • 2016-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多