Redirect Amazon S3重定向规则-保留查询参数

Redirect Amazon S3重定向规则-保留查询参数,redirect,amazon-web-services,amazon-s3,amazon-cloudfront,react-router,Redirect,Amazon Web Services,Amazon S3,Amazon Cloudfront,React Router,我注意到了,但在遵循接受的答案之后,我的查询参数仍然没有被保留 我有一个使用React和React Router的站点,这意味着我有几个加载相同HTML和JS的URL,然后JS根据URL确定要加载应用程序的哪个部分 例如: /foo、/bar、/baz都应该加载index.html,这将加载bundle.js。然后bundle.js观察URL并路由到某个React组件(也在bundle.js中) 但是,S3中不存在foo、bar或baz文件,只有index.html。我想做的是当我得到一个404

我注意到了,但在遵循接受的答案之后,我的查询参数仍然没有被保留

我有一个使用React和React Router的站点,这意味着我有几个加载相同HTML和JS的URL,然后JS根据URL确定要加载应用程序的哪个部分

例如:

/foo、/bar、/baz都应该加载index.html,这将加载bundle.js。然后bundle.js观察URL并路由到某个React组件(也在bundle.js中)

但是,S3中不存在foo、bar或baz文件,只有index.html。我想做的是当我得到一个404,重定向到/#/{URL}(例如/foo重定向到/#!/foo)。这适用于我的重定向规则(如下)。但是,我还想带上查询参数(例如/foo?ping=pong重定向到/#!/foo?ping=pong),但是/foo?ping=pong只是重定向到/#/福

以下是我的重定向规则:

<RoutingRules>
    <RoutingRule>
        <Condition>
            <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
        </Condition>
        <Redirect>
            <Protocol>http</Protocol>
            <HostName>www.mydomain.com</HostName>
            <ReplaceKeyPrefixWith>#!/</ReplaceKeyPrefixWith>
        </Redirect>
    </RoutingRule>
</RoutingRules>

404
http
www.mydomain.com
#!/

我有什么办法可以做到这一点吗?理想情况下,每次我添加新页面时,不必在S3/CloudFront中更改某些内容?

问题是,我在CloudFront中设置了源站,不转发查询字符串,因此当S3收到请求时,它将在没有查询参数的情况下正确重定向。您可以在CloudFront>行为>转发查询字符串中找到此设置。

如果您想拥有清晰的URL,也可以签出。您需要设置cloudfront发行版,然后在发行版的“错误页面”部分更改404行为。这样你就可以再次
domain.com/foo/bar
links:)

出于好奇,
/foo/?ping=pong
是否按预期工作?(在
之前添加一个尾随斜杠)交叉post。。。谢谢你的提示-我试着在cloudfront中设置它,但是当我在Chrome inspector中查看sources选项卡时,它正在加载index.html页面作为bundle.js文件,因此我得到了一个
意外标记Yes!!救命恩人@乔希:你是说直接上S3?那么不应该忽略查询参数。在我的例子中,CloudFront正在删除查询参数,这是我的问题。如果您没有使用CloudFront,您不应该遇到同样的问题。查询参数似乎只被S3文件夹重定向剥离,例如:
/my page?this=that
>>
/my page/
运气好吗@doublejosh?也有同样的问题。除了非常小心之外,找不到解决方案。你总是在分享URL时在问号前加上最后一个斜杠。