【问题标题】:Rewrite rules for s3 hosted single page application为 s3 托管的单页应用程序重写规则
【发布时间】:2018-01-16 15:42:18
【问题描述】:

我们有一个使用服务数据的单页应用程序。生成的 URL 如下所示:

www.domain.com/path/?query=my-awesome-page-title

我们希望 url 更漂亮:

www.domain.com/path/my-awesome-page-title

S3 是一项要求。

我相信唯一的解决方案将包括 Cloudfront 和可能的 Lambda,但既然我在这里问...我不完全确定。所以我把问题提给了各位专家。

【问题讨论】:

  • 您希望 URL 美化...在哪里?在地址栏中导航到/path?query=...?或者您希望能够导航到漂亮的 URL 并对其进行重写?您正在寻找的具体行为是什么?
  • 当用户导航到 www.domain.com/path/my-awesome-page-title 时,他们将获得正确的内容和体验。在应用程序结构中,我可以保留查询参数 - 或不保留。 // 其他单页应用程序(用 Vue 或 Angular 编写)如何实现这一点?
  • 这是一个:serverfault.com/a/633571/153161 ...我相信有一个我忘记的测试桶...http://spa-redirect-test.sqlbot.net/posts?this=works+for+me重定向到http://spa-redirect-test.sqlbot.net/#!/posts?this=works+for+me。不确定这是否是您要找的。这使查询保持不变,bit 不会重写它——只有路径,使用 S3 重定向规则。
  • 等等...你是 Joshua Levy 吗?

标签: amazon-web-services amazon-s3 single-page-application amazon-cloudfront


【解决方案1】:

如果您打算拥有一个漂亮的 URL,最简单方便的方法是在 AWS Stack 中使用 AWS CloudFront 和 Edge Lambda URL 重写,您可以在其中保留到 S3 路径的映射。但是目前无法通过 Edge Lambda 访问查询字符串,这将限制您仅重写 URL 的路径。

如果您需要修改包括查询字符串在内的整个 URL,您可以使用 - API 网关重写 URL - EC2 实例(虽然对于目的来说太重了)

【讨论】:

  • 虽然您可能是正确的,但我相信需要更多信息才能确定这是否适用于当前的服务功能。 CloudFront 中的 S3 重定向规则和 Lambda@Edge 目前都没有对查询字符串(只有路径)的读取权限。他们都可以在重定向中设置查询字符串(这实际上在S3重定向规则中没有记录,但你可以使用<ReplaceKeyPrefixWith>来做到这一点:匹配前缀foo,用foo?q=替换前缀,表示/foobar 重定向到foo?q=bar) 但他们都不能读取它。 API 网关功能可能是必需的。
  • Michael,“可能需要 API 网关功能”是什么意思
  • @JoshuaLevy 如果您想做涉及读取/解析/解释/操作查询字符串的服务器端重定向(没有 EC2),S3 重定向规则和 Lambda@Edge 都不能(当前)使用那些,他们只看到路径......但你可以使用 API Gateway 相对容易地做到这一点,它可以访问包括查询字符串在内的完整请求。
  • @Michael 我已根据您的输入更新了答案,以进一步明确。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-19
  • 1970-01-01
  • 2022-07-28
相关资源
最近更新 更多