redirect - 将 CloudFront 放在 AWS Amplify 前面时如何避免 301 重定向循环?

标签 redirect single-page-application amazon-cloudfront aws-amplify http-redirect

背景
我们希望 CloudFront 在我们的 AWS Amplify SPA 前面充当路由器。这样做的原因是我们需要在所有 SPA 之间共享一个公共(public)域,以便我们可以共享 localStorage。因此,每个 SPA 都将托管在 CloudFront 上的一个子路径中。我们使用 Amplify 的原因是因为我们使用的是客户端路由,所以我们需要重定向来自 https://spaOne-amplify.com/spaOne/pages/somePage 的请求。到 index.html
基本思想是我们将有一个 CloudFront 来代理/缓存来自 https://cloudFrontDomain.com/spaOne/* 的所有请求。至 https://spaOne-amplify.com/spaOne/* .
问题
但是,出于某种原因,当 Amplify 托管的 SPA 收到 Via看起来像是来自 CloudFront 的 header ,它会进入重定向循环。

  • GET https://spaOne-amplify.com/spaOne
  • 301 -/someRandomId/
  • GET https://spaOne-amplify.com/someRandomId
  • 301 -/someRandomId/
  • ... 等等

  • 我在任何地方都找不到对这种行为的详细提及,而且我不知道如何避免它。如果我删除 Via标题,或更改它,行为停止。
    以下导致重定向循环:
  • Via: 1.1 7331c3ff7c4cd86239addbfddaa5cee4.cloudfront.net (CloudFront)
  • Via: 1.1 abc.cloudfront.net (CloudFront)

  • 但这些没有:
  • Via: 1.1 7331c3ff7c4cd86239addbfddaa5cee4.cloudfront.net
  • Via: 1.1 spaOne-amplify.com (CloudFront)
  • 最佳答案

    所以这里的想法是使用目标组来加载分发(或为您的网络重定向规则)。默认情况下,我不确定是否有任何方法可以在 CloudFront 中执行此操作。

  • 但是,它可以通过创建负载均衡器(在您的情况下为应用程序)然后在您的 CloudFront 实例中将源指定为您的负载均衡器来完成。
  • 一旦所有内容都通过负载均衡器,您可以创建 Target Groups将您的重定向行为重定向到一个或另一个来源。
  • 关于redirect - 将 CloudFront 放在 AWS Amplify 前面时如何避免 301 重定向循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63951524/

    相关文章:

    tomcat - Apache Tomcat - 301 重定向

    single-page-application - 使用 Durandal 模态对话框显示小部件

    ruby-on-rails - config.action_mailer.asset_host 不提供来自云前端 CDN 的图像

    javascript - 通过类 html 内容对 html 单页站点进行 SEO

    java - AWS Java SDK2 中 CloudFrontUrlSigner 的替代品

    amazon-web-services - 按标签划分的 AWS Cloudfront 分配 ID

    php - 登录后返回上一页

    python - 在 Python 中使用 Mechanize 重定向后需要获取页面信息

    web-applications - 如何将不同的 URL 定向到同一 Tomcat 应用程序中的不同页面

    javascript - 单页应用程序发布/更新后如何回发到服务器