Question

Est-il possible de mettre un en-tête de redirection sur un s3-objet? Comme une redirection 301.

Par exemple:

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

De préférence, en fixant un en-tête de ce type sur l'objet:

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

La solution

Dans le dernier mois, cette fonctionnalité vient d'être ajouté.

Vous trouverez la documentation API ici:

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

Lorsque vous mettez votre objet, vous devez définir la clé de x-amz-website-redirect-location contre cet objet à la redirection 301 que vous souhaitez utiliser.

Vous pouvez également utiliser la console.

entrer image description ici

Autres conseils

Dans le cas où l'hébergement de site Web est activé pour le seau, il y a une autre façon d'ajouter 301 redirect. Selon elle les règles de redirection sont décrites au niveau du godet en format XML et peuvent être spécifiées dans les propriétés du godet via AWS S3 Console (section Hébergement Site Web statique). Documentation complète sur sa syntaxe se trouve actuellement .

Cette approche est pratique lorsque vous avez des mouvements d'URL massives dans la mesure où il est plus facile de gérer tous les redirections en un seul endroit. Par exemple, il est possible de définir des règles de redirection

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

On dirait qu'il est le même que la création d'objets faux et en spécifiant les métadonnées x-amz-site-redirect-emplacement pour eux. Les mauvaises nouvelles sont qu'il ya peut être pas plus de 50 ces règles en XML pour un seau. Et oui, ce n'est pas pratique de gérer XML. Mais pour moi de cette façon est plus facile à l'heure actuelle. Encore une fois, parce qu'il est plus facile de gérer tous les fichiers dans un seul endroit.

Cette XML approche est extrêmement utile lorsque vous, par exemple, un répertoire renommé avec beaucoup de pages. Dans ce cas, il est nécessaire de créer une seule règle de redirection pour le répertoire, au lieu de règle distincte pour chaque page à l'intérieur. Par exemple

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

Selon cette règle example.com/blog/whatever seront redirigés vers example.com/it-blog/whatever.

Une autre caractéristique utile de cette approche est qu'elle remplace préfixes seulement. De la même manière que pour les répertoires, il est possible pour rediriger la page, mais enregistrer les paramètres de la requête. Il pourrait convenir s'il y a un traitement JS de ces requêtes paramètres. Avec les métadonnées x-amz-site-redirect-emplacement vous aurez probablement les perdre.

Comme je l'ai mentionné l'écriture et XML lecture peut-être pas pratique. Pour remédier à cela, j'ai écrit un outil simple en ligne GWT convertir le texte brut avec les anciens et les nouvelles URL au format XML. Il utilise le prédicat et exécuter redirect KeyPrefixEquals ReplaceKeyPrefixWith.

Enfin, selon la documentation , si l'hébergement de site Web est désactivé, le soutien de redirection est pas applicable pour ce seau.

Edit: Voir ci-dessus répondre que cette fonctionnalité est maintenant natif dans AWS

Pas vraiment non. Il n'y a pas une caractéristique intrinsèque qui permet cela, cependant, ce que vous pouvez faire est de créer votre objet et même si vous ne sauvegardez pas comme HTML, vous pouvez l'appliquer en tant que fichier HTML.

Par exemple:

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

Regardez cette page ici. Voir la source sur rapidement

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

Vous pouvez voir ici une explication:

Le point 8: http://carltonbale.com/9-hidden- s3 fonctionnalités de-amazon-

htaccess 301 à Amazon S3 rediriger la traduction


style htaccess:

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

se traduit par:

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

Vous pouvez probablement écrire un petit script le long des lignes de:

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

MISE EN GARDE:. Amazon limite le nombre de règles redirect à 50

AWSCLI vous permet de faire facilement maintenant (sorte de)

  1. seau est que 100% du public
  2. seau sûr est en mode d'hébergement de site Web
  3. Ne consulter le site en utilisant son https://<bucket_name>.s3-website-<region>.amazonaws.com URL complète
  4. Utilisez l'appel s3api pour régler la redirection

    SSFE s3api mis objet --acl lire publique --website-redirect-lieu « http: // autre-lieu .com » --bucket foo-seau --key quelque part / bla

Remarque :. Vous ne publiez pas un objet à S3, car il ne servira un 301 et rediriger en-tête de Location

Test avec

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top