2016-02-16 11 views
5

Amazon S3とCloudfrontを使用して静的なWebサイトホスティングを設定する際にいくつかの問題があります。S3、CloudFront、Origin Pathを使用したサブフォルダリダイレクトの問題

私たちは、Amazon S3 + Cloudfrontを使用して静的なWebサイトを提供したいと考えている多くのWebサイトがあります。これらのWebサイトをすべて単一のS3バケットにホストしたいと考えています。

初期設定はかなり単純ですが、URLに末尾にスラッシュを付けないと、サブフォルダのリダイレクトに問題が発生しています。

たとえば、バケットから単一のWebサイトを設定する:

S3:WEBSITE1ため

バケット内容//bucket-name/websites/website1/index.html

S3 ://bucket-name/websites/website1/about/index.html

このバケットの静的なWebサイトホスティングを有効にしました。デフォルトのドキュメントは 'index.html'に設定されています

私はこの単一のウェブサイトを提供するCloudfront Webディストリビューションを作成しました。デフォルトのルートオブジェクトは 'index.html'に設定されています。

分布は「/ウェブサイト/ WEBSITE1」

に設定起源パスと静的なウェブサイトのURL「bucket-name.s3-website-us-east-1.amazonaws.com」を指すカスタム起源を持っていますまた、正しく「http://example.cloudfront.net/about/」にそれを移動するとき

を:配布URL「http://example.cloudfront.net」に移動するとき、それは正しく「//bucket-name/websites/website1/index.html S3」から「index.htmlを」文書を提供しています's3://bucket-name/websites/website1/about/index.html'の 'index.html'ドキュメントを提供します。

ただし、I om 「http://example.cloudfront.net/about」のような末尾のスラッシュは、「/ websites/website1」に設定されたOrigin Pathを持っているので、私は 'http://example.cloudfront.net/websites/website1/about/'にリダイレクトされます。Cloudfrontは 's3:// bucket-name/websites/website1/about /websites/website1/about/index.html 'は存在しません。

ここに何か不足していますか?これは、CloudfrontとS3だけを使用することは不可能なセットアップですか?

+0

新しいディストリビューションを追加するときにルーティングルールを変更するために覚えておく必要があるということであるネット/について/ ")

私はあなたのディストリビューションのために複数の起点(各フォルダに1つ)を追加する必要があると思います –

+0

@KhalidT。ahはい、これを設定しようとしているのですが、それはURLのサブフォルダを省略するとリダイレクトの問題になります –

+0

S3はオブジェクトベースのストレージなので、ファイルとフォルダを区別します(すべてオブジェクトです)。後続のスラッシュを省略すると、このような動作が発生する可能性があります。 –

答えて

8

I問題がOrgiginパスに後続のスラッシュ結果を省略を完全S3バケットパスに追加されることによって引き起こされるリダイレクトされS3バケットのルーティングルール

https://docs.aws.amazon.com/AmazonS3/latest/dev/HowDoIWebsiteConfiguration.html#configure-bucket-as-website-routing-rule-syntax

を使用して、それを解決することになりました( "example.cloudfront.net/about"は "example.cloudfront.net /websites/website1/website1/websites/website1/about/"にリダイレクトされます。パスが無効であるために失敗します)

以下のルーティングルールは、トリガーによってこれを解決します障害のあるパスパターンのプレフィックスを確認し、Cloudfront配布にリダイレクトする要求から除外されたプレフィックス(例えば、 "example.cloudfront.net/about"は "example.cloudfront.net/websites/website1/about/"にリダイレクトされ、 "example.cloudfront"にリダイレクトされます)。欠点は

<RoutingRules> 
    <RoutingRule> 
     <Condition> 
      <KeyPrefixEquals>websites/website1/websites/website1/</KeyPrefixEquals> 
     </Condition> 
     <Redirect> 
      <HostName>example.cloudfront.net</HostName> 
      <ReplaceKeyPrefixWith></ReplaceKeyPrefixWith> 
     </Redirect> 
    </RoutingRule> 
</RoutingRules> 
+0

このサンプルを使用しようとしましたが、後ろにスラッシュが追加されていません。私はCNAME www.my-cname.com/about/www.my-cname.com/about/を取得し、「あまりにも多くのリダイレクト」に終わります。 – hybrid9

関連する問題