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

时间:2015-06-11 08:06:22

标签: redirect amazon-web-services amazon-s3 amazon-cloudfront react-router

我注意到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中进行更改?

2 个答案:

答案 0 :(得分:26)

问题是我在CloudFront中设置了原点而不是转发查询字符串,因此当S3获得请求时,它将在没有查询参数的情况下正确地重定向。您可以在CloudFront&gt;中找到此设置。行为&gt;转发查询字符串。

答案 1 :(得分:2)

如果你想要有清晰的网址,你也可以查看this trick。您需要设置cloudfront分发,然后在分发的“错误页面”部分中更改404行为。这样你就可以再次domain.com/foo/bar链接:)