我注意到Amazon S3 Redirect rule - GET data is missing但是在按照接受的答案后,我的查询参数仍然没有被保留。
我有一个使用React和React Router的网站,这意味着我有几个URL加载相同的HTML和JS,然后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只是重定向到/#!/ foo。 / p>
以下是我的重定向规则:
<RoutingRules>
<RoutingRule>
<Condition>
<HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
</Condition>
<Redirect>
<Protocol>http</Protocol>
<HostName>www.mydomain.com</HostName>
<ReplaceKeyPrefixWith>#!/</ReplaceKeyPrefixWith>
</Redirect>
</RoutingRule>
</RoutingRules>
我能以某种方式获得任何想法吗?理想情况下,每次添加新页面时都不必在S3 / CloudFront中进行更改?
答案 0 :(得分:26)
问题是我在CloudFront中设置了原点而不是转发查询字符串,因此当S3获得请求时,它将在没有查询参数的情况下正确地重定向。您可以在CloudFront&gt;中找到此设置。行为&gt;转发查询字符串。
答案 1 :(得分:2)
如果你想要有清晰的网址,你也可以查看this trick。您需要设置cloudfront分发,然后在分发的“错误页面”部分中更改404行为。这样你就可以再次domain.com/foo/bar
链接:)