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
War es hilfreich?

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.

eingeben Bild Beschreibung hier

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.

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)

  1. Stellen Sie sicher, Eimer ist zu 100% öffentlich
  2. Stellen Sie sicher, Eimer im Website-Hosting-Modus
  3. Nur siehe Seite es zum vollständigen URL https://<bucket_name>.s3-website-<region>.amazonaws.com
  4. Mit dem s3api Aufruf der Umleitung einstellen

    aws 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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top