Amazon S3 Objekt Redirect
-
20-09-2019 - |
Frage
Ist es möglich, eine Umleitung-Header auf einem s3-Objekt zu setzen? Wie eine 301-Weiterleitung.
Zum Beispiel:
mybucket.amazon-aws.com/myobject --> example.com/test
vorzugsweise durch einen Kopf wie dies auf dem Objekt einstellen:
HTTP/1.1 301 Moved Permanently
Location: http://example.com/test
Content-Type: text/html
Content-Length: 0
Lösung
Im letzten Monat wird diese Funktionalität nur hinzugefügt.
Sie können die API-Dokumentation finden Sie hier:
http://docs.amazonwebservices.com/ AmazonS3 / latest / dev / how-to-page-redirect.html
Wenn Sie Ihr Objekt PUT, müssen Sie die 301-Weiterleitung des x-amz-website-redirect-location
Schlüssel gegen das Objekt setzen, die Sie verwenden möchten.
Sie können auch die Konsole verwenden.
Andere Tipps
Im Fall, wenn Website-Hosting für den Eimer aktiviert ist, gibt es eine alternative Art und Weise 301-Weiterleitung hinzuzufügen. Nach ihren Umleitungsregeln werden auf der heißen Stein Ebene im XML-Format beschrieben und können in Eimer Eigenschaften über AWS S3 Console (Static Website-Hosting-Bereich) angegeben werden. Eine vollständige Dokumentation über die Syntax kann zur Zeit gefunden werden hier .
Dieser Ansatz ist praktisch, wenn Sie massive URL Bewegungen so weit wie es einfacher ist, alle Umleitungen an einem Ort zu verwalten. Zum Beispiel ist es möglich Umleitungsregeln
zu definieren,<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>
Es sieht aus wie es die gleichen wie gefälschte Objekte erstellen und x-amz-Website-Redirect-Standort-Metadaten für sie angeben. Die schlechten Nachrichten sind, dass es könnte sein, nicht mehr als 50 solche Regeln in XML für einen Eimer. Und ja, es ist nicht bequem XML zu verwalten. Aber für mich ist diese Art und Weise ist derzeit einfacher. Auch, weil es einfacher ist, alle Dateien an einem zentralen Ort zu verwalten.
Dieses XML-Ansatz ist äußerst nützlich, wenn Sie, sagen wir, ein Verzeichnis mit vielen Seiten umbenannt. In diesem Fall ist es notwendig, schaffen, anstatt separate Regel für jede Seite in ihm eine einzige Umleitungsregel für Verzeichnis. Zum Beispiel
<RoutingRule>
<Condition>
<KeyPrefixEquals>blog/</KeyPrefixEquals>
</Condition>
<Redirect>
<ReplaceKeyPrefixWith>it-blog/</ReplaceKeyPrefixWith>
</Redirect>
</RoutingRule>
Nach dieser Regel example.com/blog/whatever
wird example.com/it-blog/whatever
umgeleitet werden.
Ein weiteres nützliches Merkmal eines solchen Ansatzes ist, dass es nur Präfixe ersetzt. Auf die gleiche Weise wie bei Verzeichnissen ist es möglich, umleiten Seite, aber speichern Abfrageparameter. Es könnte geeignet sein, wenn es einige JS Verarbeitung dieser Abfrage ist Parameter. Mit x-amz-Website-Redirect-Standort-Metadaten werden Sie wahrscheinlich sie verlieren.
Wie ich bereits erwähnte Schreiben und Lesen von XML unbequem sein könnte. Um dies zu überwinden Ich schrieb in GWT href="http://sukharevd.net/static/files/blog/s3routes/index.html"> zu
konvertiert Klartext mit früheren und neuen URLs in XML-Format. Es nutzt die
KeyPrefixEquals
Prädikat und ReplaceKeyPrefixWith
Umleitung auszuführen.
Schließlich ist nach Dokumentation , wenn Website-Hosting deaktiviert ist, die Umleitung Unterstützung ist für diesen Eimer nicht anwendbar.
Die Fähigkeit hinzugefügt wurde kürzlich: http://aws.typepad.com/aws/2012/10/amazon-s3-support-for-website-redirects.html
Edit: Siehe Antwort oben wie diese Funktionalität ist jetzt native AWS
Nicht wirklich nicht. Es gibt nicht eine eingebaute Funktion, die dies ermöglicht es jedoch, was Sie tun können, ist Ihr Objekt zu erstellen und auch wenn Sie speichern Sie es als HTML nicht tun, können Sie es als HTML-Datei.
Zum Beispiel:
<!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>
Schauen Sie sich das an:. Zeigen Sie die Quelle auf schnell
view-source: http://carltonbale.com.s3.amazonaws.com /distance_chart.png
Sie können eine Erklärung siehe hier:
Punkt 8: http://carltonbale.com/9-hidden- kennzeichnet-of-amazon-s3
.htaccess 301 auf Amazon S3 Redirect Übersetzung
.htaccess-Stil:
Redirect 301 /old/old.html http://www.new.com/new/new.html
übersetzt:
<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>
Sie könnten wahrscheinlich ein kleines Skript entlang der Linien von schreiben
// -----------------
// 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"));
. ACHTUNG: Amazon begrenzt die Anzahl der Umadressierungsregel bis 50
AWSCLI können Sie dies tun, einfach jetzt (Art)
- Stellen Sie sicher, Eimer ist zu 100% öffentlich
- Stellen Sie sicher, Eimer im Website-Hosting-Modus
- Nur siehe Seite es zum vollständigen URL
https://<bucket_name>.s3-website-<region>.amazonaws.com
-
Mit dem
s3api
Aufruf der Umleitung einstellenaws s3api Put-Objekt --acl öffentlich-lesen --website-Redirect-Location „ http: // other-Standort .com “--bucket foo-Eimer --key irgendwo / blah
Hinweis . Sie hinterlassen kein Objekt S3, weil es nur einen 301 und Umleitung Location
Header dienen
Test mit
curl -v 2 -L https://<bucket_name>.s3-website-<region>.amazonaws.com/somewhere/blah