56 Stimmen

Amazon S3-Objekt-Umleitung

Ist es möglich, einen Redirect-Header auf ein s3-Objekt zu setzen? Wie eine 301-Weiterleitung.

Zum Beispiel:

mybucket.amazon-aws.com/myobject --> example.com/test

Vorzugsweise durch Setzen einer Kopfzeile wie dieser auf dem Objekt:

HTTP/1.1 301 Moved Permanently
Location: http://example.com/test
Content-Type: text/html
Content-Length: 0

48voto

Layke Punkte 48417

Erst im letzten Monat wurde diese Funktion hinzugefügt.

Sie können die API-Dokumentation hier finden:

http://docs.amazonwebservices.com/AmazonS3/latest/dev/how-to-page-redirect.html

Wenn Sie Ihr Objekt mit PUT versehen, müssen Sie die x-amz-website-redirect-location Schlüssel für dieses Objekt auf die 301-Weiterleitung, die Sie verwenden möchten.

Sie können auch die Konsole verwenden.

enter image description here

15voto

Dmitriy Sukharev Punkte 1054

Falls das Website-Hosting für den Bucket aktiviert ist, gibt es eine alternative Möglichkeit, eine 301-Weiterleitung hinzuzufügen. Demnach werden die Umleitungsregeln auf Bucket-Ebene im XML-Format beschrieben und können in den Bucket-Eigenschaften über die AWS S3 Console (Abschnitt Static Website Hosting) angegeben werden. Eine vollständige Dokumentation der Syntax finden Sie derzeit unter aquí .

Dieser Ansatz ist praktisch, wenn Sie massive URL-Bewegungen haben, da es einfacher ist, alle Umleitungen an einer Stelle 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 so aus, als ob es dasselbe ist wie die Erstellung gefälschter Objekte und die Angabe von x-amz-website-redirect-location-Metadaten für diese. Die schlechte Nachricht ist, dass es nicht mehr als 50 solcher Regeln in XML für einen Bucket geben kann. Und ja, es ist nicht bequem, XML zu verwalten. Aber für mich ist dieser Weg im Moment einfacher. Wiederum, weil es einfacher ist, alle Dateien an einem Ort zu verwalten.

Dieser XML-Ansatz ist äußerst nützlich, wenn Sie z. B. ein Verzeichnis mit vielen Seiten umbenannt haben. In diesem Fall ist es notwendig, die eine einzige Umleitungsregel für das Verzeichnis zu erstellen, anstatt eine separate Regel für jede Seite darin. Zum Beispiel

<RoutingRule>
    <Condition>
        <KeyPrefixEquals>blog/</KeyPrefixEquals>
    </Condition>
    <Redirect>
        <ReplaceKeyPrefixWith>it-blog/</ReplaceKeyPrefixWith>
    </Redirect>
</RoutingRule>

Diese Regel besagt example.com/blog/whatever wird umgeleitet zu example.com/it-blog/whatever .

Ein weiteres nützliches Merkmal eines solchen Ansatzes ist, dass nur Präfixe ersetzt werden. Genauso wie bei Verzeichnissen ist es möglich Seite umzuleiten, aber Abfrageparameter zu speichern. Es könnte geeignet sein, wenn es einige JS-Verarbeitung dieser Abfrageparameter gibt Parameter gibt. Mit x-amz-website-redirect-location-Metadaten werden sie wahrscheinlich verloren gehen.

Wie bereits erwähnt, kann das Schreiben und Lesen von XML lästig sein. Um dies zu vermeiden, schrieb ich ein einfaches Online-Tool in GWT zu einfachen Text mit alten und neuen URLs in das XML-Format zu konvertieren. Es verwendet die KeyPrefixEquals Prädikat und Ausführung ReplaceKeyPrefixWith umleiten.

Schließlich, so die Dokumentation , Wenn das Website-Hosting deaktiviert ist, ist die Umleitungsunterstützung für diesen Bucket nicht anwendbar.

7voto

Layke Punkte 48417

Bearbeiten: Siehe obige Antwort, da diese Funktion jetzt in AWS integriert ist.

Nicht wirklich nein. Es gibt keine eingebaute Funktion, die dies ermöglicht. Was Sie jedoch tun können, ist Ihr Objekt zu erstellen, und selbst wenn Sie es nicht als HTML speichern, können Sie es als HTML-Datei anwenden.

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>

Sehen Sie sich diese Seite hier an: Sehen Sie sich die Quelle dazu schnell an.

Ansicht-Quelle: http://carltonbale.com.s3.amazonaws.com/distance_chart.png

Eine Erklärung dazu finden Sie hier:

Punkt 8: http://carltonbale.com/9-hidden-features-of-amazon-s3

7voto

seva.lapsha Punkte 103

Diese Möglichkeit wurde erst kürzlich hinzugefügt: http://aws.typepad.com/aws/2012/10/amazon-s3-support-for-website-redirects.html

4voto

Joseph Lust Punkte 18000

AWSCLI kann man das jetzt ganz einfach tun (sozusagen)

  1. Stellen Sie sicher, dass der Eimer zu 100% öffentlich ist.
  2. Stellen Sie sicher, dass der Eimer im Modus Website-Hosting ist
  3. Verweisen Sie nur unter Verwendung der vollständigen URL auf die Website. https://<bucket_name>.s3-website-<region>.amazonaws.com
  4. Verwenden Sie die s3api Aufruf zum Einstellen der Umleitung

    aws s3api put-object --acl public-read --website-redirect-location " http://other-location.com "--bucket foo-bucket --key somewhere/blah

Hinweis : Sie stellen kein Objekt in S3 ein, denn es wird nur eine 301 und Weiterleitung Location Kopfzeile.

Test mit

curl -v 2 -L https://<bucket_name>.s3-website-<region>.amazonaws.com/somewhere/blah

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X