Domanda

È possibile inserire un'intestazione di reindirizzamento su un oggetto s3?Come un reindirizzamento 301.

Per esempio:

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

Preferibilmente impostando sull'oggetto un'intestazione come questa:

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

Soluzione

Entro il mese scorso, è stato appena aggiunto questa funzionalità.

È possibile trovare la documentazione API qui:

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

Quando si mette l'oggetto, è necessario impostare la chiave x-amz-website-redirect-location contro quell'oggetto al redirect 301 che si desidera utilizzare.

È anche possibile utilizzare la console.

entrare descrizione dell'immagine qui

Altri suggerimenti

Nel caso in cui il sito web hosting è abilitato per il secchio, v'è un modo alternativo per aggiungere 301 reindirizzamento. In base ad esso le regole di reindirizzamento sono descritti a livello secchio in formato XML, e possono essere specificate nelle proprietà di benna tramite AWS S3 Console (Statico Sito sezione Hosting). La documentazione completa sulla sua sintassi attualmente può essere trovato qui .

Questo approccio è utile quando si hanno i movimenti URL massicci quanto è più facile da gestire tutte le redirezioni in un unico luogo. Per esempio è possibile definire regole di reindirizzamento

<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>

Sembra che sia lo stesso di creazione di oggetti falsi e specificando x-AMZ-sito-reindirizzamento-location metadati per loro. La cattiva notizia è che non ci sono, non potrebbe essere più di 50 tali norme in XML per un secchio. E sì, non è conveniente per gestire XML. Ma per me in questo modo è più facile in questo momento. Anche in questo caso, perché è più facile da gestire tutti i file in un unico luogo.

Questa XML-approccio è estremamente utile quando si, diciamo, rinominato una directory con un sacco di pagine. In questo caso è necessario creare una singola regola di reindirizzamento per la directory, invece di regola separata per ogni pagina all'interno di esso. Per esempio

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

In base a questa regola example.com/blog/whatever verrà reindirizzato alla example.com/it-blog/whatever.

Un'altra caratteristica utile di tale approccio è che esso sostituisce solo prefissi. Allo stesso modo, come con le directory è possibile reindirizzare la pagina, ma salvare i parametri di query. Potrebbe essere adatto se c'è qualche elaborazione JS di questi interrogazione parametri. Con i metadati x-AMZ-sito-redirect-location probabilmente li perdi.

Come ho già detto la scrittura e la lettura di XML potrebbe essere scomodo. Per superare questo ho scritto un semplice strumento online in GWT a convertire il testo in chiaro con gli URL vecchio e nuovo in formato XML. Esso utilizza il KeyPrefixEquals predicato ed eseguire ReplaceKeyPrefixWith reindirizzamento.

Infine, secondo la documentazione , se sito web hosting è disattivata, il supporto di reindirizzamento non è applicabile per questo secchio.

Modifica: Vedi la risposta di cui sopra come questa funzionalità è ora nativo AWS

Non proprio no. Non v'è una caratteristica intrinseca che permette questo, però, cosa si può fare è quello di creare l'oggetto e anche se non si salva come HTML, è possibile applicare come un file HTML.

Ad esempio:

<!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>

Guardate questa pagina qui.: Visualizza fonte su di esso in modo rapido

view-source: http://carltonbale.com.s3.amazonaws.com /distance_chart.png

Si può vedere una spiegazione qui:

Punto 8: http://carltonbale.com/9-hidden- caratteristiche-di-amazon-s3

.htaccess 301 per Amazon S3 reindirizzare traduzione


style .htaccess:

Redirect 301 /old/old.html http://www.new.com/new/new.html

si traduce in:

<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>

Probabilmente si potrebbe scrivere un piccolo script lungo le linee di:

// -----------------
// 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"));

. ATTENZIONE: Amazon limita il numero di regole di reindirizzamento a 50

AWSCLI ti permette di farlo facilmente ora (più o meno)

  1. Assicurati che il bucket sia pubblico al 100%.
  2. Assicurati che il bucket sia in modalità hosting del sito web
  3. Fare riferimento al sito solo utilizzando l'URL completo https://<bucket_name>.s3-website-<region>.amazonaws.com
  4. Usa il s3api chiamare per impostare il reindirizzamento

    aws s3api put-object --acl public-read --website-redirect-location "http://other-location.com" --bucket foo-bucket --chiave da qualche parte/bla

Nota:Non pubblichi alcun oggetto su S3, perché servirà solo un 301 e reindirizzerà Location intestazione.

Prova con

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top