ここで参照されているオブジェクトを使用して、S3で301リダイレクトをセットアップしようとしています http://docs.aws.Amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html 。私はいくつかの問題を抱えていて、私が間違っていることを理解できないようです。
私が取得するのは、「Website Redirect Location」メタデータ値が設定されていないかのような空白ページ(0バイトのファイル)です。
何が間違っているのですか?
また、これはAWS CloudFrontでも機能しますか?
S3コンソールのセットアップ
注意すべき点:
静的サイトをホストするためのこのセットアップがあります。 ssl/httpsを使用し、Cloudfrontディストリビューションにアップロードして設定した独自の証明書を使用しています。リダイレクトオブジェクトを除くすべてのページが機能しているようです。ルーティングルールを設定しようとしましたが、Cloudfrontで機能しないようです。
Cloudfront urlとs3 urlの両方からリダイレクトにアクセスしようとしています( https://s3.amazonaws.com/ {bucket}/users/sign_in)
S3のリダイレクト、htmlエラーメッセージ、インデックスドキュメントなどのWebサイトのような機能の場合、RESTエンドポイント(${bucket_name}.s3.amazonaws.com
または${bucket_name}.s3.${region}.amazonaws.com
)は使用できないため、使用できません。 Webサイトのエンドポイント(${bucket_name}.s3-website.${region}.amazonaws.com
)によってのみ提供されます。
http://docs.aws.Amazon.com/AmazonS3/latest/dev/WebsiteEndpoints.html
Cloudfrontで動作を使用可能にするには、コンソールのオートコンプリートによって提供されるRESTエンドポイントではなく、このエンドポイントを使用するようにCloudfrontを構成する必要があります。
バケットのAmazon S3静的ウェブサイトホスティングエンドポイントを入力します。この値は、Amazon S3コンソールのPropertiesページのStatic Website Hostingに表示されます。
この形式でバケット名を指定すると、Amazon S3リダイレクトとAmazon S3カスタムエラードキュメントを使用できます。
WebエンドポイントはHTTPSをサポートしていませんが、クライアント接続がHTTPSでもバケットからHTTPで取得するようにCloudfrontを設定できます。
役立つヒント:CloudFrontを使用して変更のトラブルシューティングとテストを行う場合、ユーザーは、変更を行ってからCloudFrontが新しい動作を開始するまでの「レイテンシー」に混乱することがよくあります。エラーページの場合、CloudFrontにはデフォルトの5分がありますError Caching Minimum TTL失敗したページのリクエストをオリジンに再送信できないようにする、およびこれは、キャッシュ動作で設定された最小/デフォルト/最大TTLとは別のタイマーです。特にテスト時には、これらのタイマーを無効にして、エラーを返したページの後続のリクエストごとに再試行を強制することができます。これは、明らかな Amazon CloudFront Latency についての質問への回答で提供されたステップを使用します。
リダイレクトが失敗し、長さゼロのファイルがダウンロードされるという同じ問題がありましたが、Cloudfrontを使用していませんでした。
私の場合の根本的な原因は、Webサイトのエンドポイント(static.righto)ではなく、RESTエンドポイント(static.righto.com.s3-us-west-2.amazonaws.com)を指しているDNS CNAMEレコードでした。 .com.s3-website-us-west-2.amazonaws.com)。 CNAMEレコードを更新すると、リダイレクトが修正されました。
この問題の別の症状は、HTMLエラーページではなくXMLエラーページが表示されたページが見つからないことでした。
このドキュメント は、WebサイトのエンドポイントとRESTエンドポイントの違いについて説明しています。
CloudFrontを使用せずにソリューションを見つけるためにここに来る場合、ここにあります:
S3cmd(もちろんbashスクリプトで)とそのパラメーターを使用できます。
--add-header
with x-amz-website-redirect-location
たとえば、次のスクリプトはページ/about/
の問題を解決します。
s3cmd \
--acl-public \
--add-header "x-amz-website-redirect-location: /about/" \
--no-preserve \
put "./path/to/any/small/file/at/your/local/drive/index.html" "s3://domain.com/about"
このスクリプトは、some既存のファイルをnewスラッシュなしのファイル名でコピーします。ブラウザはすぐにリダイレクトされるため、ファイルに何が含まれているかは重要ではありません。
(そしてより重要なweb-crawlers)ページ/about
を開こうとすると、301
が/about/
にリダイレクトされます。これにより、Google、Yandex、その他の検索エンジンの右側ページキャッシュ内を維持できます。
このコードを複数のページで繰り返すことができます。または、フォルダを検索するための機能を追加し、各フォルダを呼び出すことができます。おそらくあなたはここにそれを見せてくれるでしょう:)