S3オブジェクトにリダイレクトヘッダーを置くことは可能ですか? 301リダイレクトのように。
例えば:
mybucket.Amazon-aws.com/myobject --> example.com/test
できれば、オブジェクトに次のようなヘッダーを設定してください。
HTTP/1.1 301 Moved Permanently
Location: http://example.com/test
Content-Type: text/html
Content-Length: 0
先月、この機能が追加されました。
APIドキュメントは次の場所にあります。
http://docs.amazonwebservices.com/AmazonS3/latest/dev/how-to-page-redirect.html
オブジェクトをPUTするとき、そのオブジェクトに対してx-amz-website-redirect-location
キーを使用する301リダイレクトに設定する必要があります。
コンソールを使用することもできます。
バケットでウェブサイトのホスティングが有効になっている場合、301リダイレクトを追加する別の方法があります。それに応じて、リダイレクトルールはバケットレベルでXML形式で記述され、AWS S3コンソール(静的ウェブサイトホスティングセクション)を介してバケットのプロパティで指定できます。現在、その構文に関する完全なドキュメントは here にあります。
このアプローチは、すべてのリダイレクトを1か所で管理する方が簡単である限り、URLの大規模な移動がある場合に便利です。たとえば、リダイレクトルールを定義することが可能です
<RoutingRule>
<Condition>
<KeyPrefixEquals>index.php</KeyPrefixEquals>
</Condition>
<Redirect>
<ReplaceKeyWith>index.html</ReplaceKeyWith>
</Redirect>
</RoutingRule>
<RoutingRule>
<Condition>
<KeyPrefixEquals>blog.php?id=21</KeyPrefixEquals>
</Condition>
<Redirect>
<ReplaceKeyWith>mysql-utf-8-database-creation-snippet.html</ReplaceKeyWith>
</Redirect>
</RoutingRule>
偽のオブジェクトを作成し、x-amz-website-redirect-locationメタデータを指定するのと同じように見えます。悪いニュースは、1つのバケットのXMLに50を超えるそのようなルールが存在しない可能性があることです。そして、はい、XMLを管理するのは便利ではありません。しかし、私にとって、この方法は現在簡単です。繰り返しますが、すべてのファイルを1か所で管理する方が簡単だからです。
このXMLアプローチは、たとえば、多くのページがあるディレクトリの名前を変更した場合に非常に役立ちます。この場合、ディレクトリ内の各ページに個別のルールを作成するのではなく、ディレクトリに単一のリダイレクトルールを作成する必要があります。例えば
<RoutingRule>
<Condition>
<KeyPrefixEquals>blog/</KeyPrefixEquals>
</Condition>
<Redirect>
<ReplaceKeyPrefixWith>it-blog/</ReplaceKeyPrefixWith>
</Redirect>
</RoutingRule>
このルールに従って、example.com/blog/whatever
はexample.com/it-blog/whatever
にリダイレクトされます。
このようなアプローチのもう1つの便利な機能は、プレフィックスのみを置き換えることです。ディレクトリの場合と同じように、ページをリダイレクトできますが、クエリパラメータは保存します。これらのクエリパラメータのJS処理がある場合に適しています。 x-amz-website-redirect-locationメタデータを使用すると、おそらくそれらが失われます。
前述したように、XMLの書き込みと読み取りは不便かもしれません。これを克服するために、GWTで シンプルなオンラインツール を作成し、以前のURLと新しいURLを含むプレーンテキストをXML形式に変換しました。 KeyPrefixEquals
述語を使用して、ReplaceKeyPrefixWith
リダイレクトを実行します。
最後に、 documentation によると、ウェブサイトのホスティングが無効になっている場合、このバケットにはリダイレクトのサポートは適用されません。
編集:この機能はAWSでネイティブになったため、上記の回答を参照してください
本当にない。これを可能にする組み込み機能はありませんが、できることはオブジェクトを作成することです。HTMLとして保存しない場合でも、HTMLファイルとして適用できます。
例えば:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Refresh" content="0; URL=http://www.example.com/target/">
<title>Redirect</title>
</head>
<body>
<a href="http://www.example.com/target/">http://www.example.com/target/</a>
</body>
</html>
こちらのページをご覧ください。ソースをすばやく表示します。
view-source: http://carltonbale.com.s3.amazonaws.com/distance_chart.png
ここで説明を見ることができます:
htaccess 301からAmazon S3リダイレクト変換
htaccessスタイル:
Redirect 301 /old/old.html http://www.new.com/new/new.html
に翻訳する:
<RoutingRule>
<Condition>
<KeyPrefixEquals>old/old.html</KeyPrefixEquals>
</Condition>
<Redirect>
<HostName>www.new.com</HostName>
<Protocol>http</Protocol>
<HttpRedirectCode>301</HttpRedirectCode>
<ReplaceKeyWith>new/new.html</ReplaceKeyWith>
</Redirect>
</RoutingRule>
おそらく、次の行に沿って小さなスクリプトを書くことができます。
// -----------------
// Javascript
// htaccess to Amazon s3 redirect for static s3 websites.
// (XML goes into S3 Bucket Properties Editor > [x] Enable website hosting > Edit Redirection Rules box.)
// -----------------
var list = [
"Redirect 301 /old/old-1.html http://www.new.com/new/new-1.html",
"Redirect 301 /old/old-2.html http://www.new.com/new/new-2.html",
"Redirect 301 /old/old-3.html http://www.new.com/new/new-3.html"
];
var output = [];
output.Push('<?xml version="1.0"?>');
output.Push('<RoutingRules>');
for(var i=0; i<list.length; i++){
var item = list[i].replace("Redirect 301 /", "").split(" ");
var oldLoc = item[0];
var newLoc = item[1];
output.Push(" <RoutingRule>");
output.Push(" <Condition>");
output.Push(" <KeyPrefixEquals>" + oldLoc + "/KeyPrefixEquals>");
output.Push(" </Condition>");
output.Push(" <Redirect>");
if(newLoc.substr(0, 1) == "/"){
output.Push(" <ReplaceKeyWith>" + newLoc + "</ReplaceKeyWith>");
} else {
var splitNewLoc = newLoc.replace("http://", "").split("/");
var Host = splitNewLoc.shift();
var path = splitNewLoc.join("/");
output.Push(" <HostName>" + Host + "</HostName>");
output.Push(" <Protocol>http</Protocol>");
output.Push(" <HttpRedirectCode>301</HttpRedirectCode>");
if(path){
output.Push(" <ReplaceKeyWith>" + path + "</ReplaceKeyWith>");
}
}
output.Push(" </Redirect>");
output.Push(" </RoutingRule>");
}
output.Push('</RoutingRules>');
print(output.join("\n"));
警告:Amazonはリダイレクトルールの数を50に制限しています。
[〜#〜] awscli [〜#〜] これを今すぐ簡単に行うことができます(並べ替え)
https://<bucket_name>.s3-website-<region>.amazonaws.com
使用 s3api
リダイレクトを設定するための呼び出し
aws s3api put-object --acl public-read --website-redirect-location " http://other-location.com " --bucket foo-bucket --key somewhere/blah
注:S3にはオブジェクトを投稿しないでください。S3は301のみを提供し、Location
ヘッダーをリダイレクトするためです。
でテスト
curl -v 2 -L https://<bucket_name>.s3-website-<region>.amazonaws.com/somewhere/blah