Amazon S3リダイレクトルール-GETデータがありません に気づきましたが、受け入れられた回答に従った後でも、クエリパラメータが保持されていません。
ReactおよびReactルーターを使用するサイトがあります。つまり、同一のHTMLとJSをロードするURLがいくつかあり、JSがその部分を特定します。 URLに基づいてロードするアプリ。
例えば:
/ foo、/ bar、/ bazはすべて、bundle.jsをロードするindex.htmlをロードする必要があります。次に、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にリダイレクトされます。
これが私のリダイレクトルールです:
<RoutingRules>
<RoutingRule>
<Condition>
<HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
</Condition>
<Redirect>
<Protocol>http</Protocol>
<HostName>www.mydomain.com</HostName>
<ReplaceKeyPrefixWith>#!/</ReplaceKeyPrefixWith>
</Redirect>
</RoutingRule>
</RoutingRules>
これを達成するための何らかのアイデアはありますか?理想的には、新しいページを追加するたびにS3/CloudFrontで何かを変更する必要はありませんか?
問題は、クエリ文字列を転送しないようにCloudFrontでOriginを設定していたため、S3がリクエストを取得すると、クエリパラメータなしで適切にリダイレクトされることでした。この設定は、CloudFront> Behaviors> Forward QueryStringsにあります。
明確なURLが必要な場合は、チェックアウトすることもできます このトリック 。クラウドフロントディストリビューションをセットアップしてから、ディストリビューションの「エラーページ」セクションで404の動作を変更する必要があります。そうすれば、再びdomain.com/foo/bar
リンク:)