Pregunta

¿Es posible poner un encabezado de redirección en un s3 a objetos? Al igual que una redirección 301.

Por ejemplo:

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

Preferiblemente mediante el establecimiento de un encabezado de este tipo en el objeto:

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

Solución

En el pasado mes, solo se ha añadido esta funcionalidad.

Puede encontrar la documentación de la API aquí:

http://docs.amazonwebservices.com/ AmazonS3 / tarde / dev / cómo-a-página-redirect.html

Cuando puesto que el objeto, es necesario establecer la clave x-amz-website-redirect-location contra ese objeto a la redirección 301 que desea utilizar.

También puede utilizar la consola.

introducir descripción de la imagen aquí

Otros consejos

En caso de alojamiento de sitios web está habilitada para el cubo, no es una forma alternativa de añadir 301 redirección. De acuerdo con las reglas de redirección que se describen en el nivel de cubo en formato XML, y pueden especificarse en las propiedades del cubo a través de AWS S3 consola (estático Sitio sección Alojamiento). La documentación completa sobre su sintaxis Actualmente se puede encontrar aquí .

Este enfoque es útil cuando quiera movimientos masivos de URL por lo que es más fácil de gestionar todos los cambios de dirección en un solo lugar. Por ejemplo es posible definir reglas de redireccionamiento

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

Parece que es lo mismo que crear objetos falsos y especificando x-AMZ-web-redirigir en la localización de metadatos para ellos. Las malas noticias son que hay podría ser no más de 50 de estas normas en XML para un cubo. Y sí, no es conveniente para administrar XML. Pero para mí de esta manera es más fácil en la actualidad. Una vez más, porque es más fácil de gestionar todos los archivos en un solo lugar.

Este XML-enfoque es muy útil cuando, por ejemplo, cambió el nombre de un directorio con una gran cantidad de páginas. En este caso es necesario crear una sola regla de redirección para el directorio, en lugar de la regla independiente para cada página en su interior. Por ejemplo

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

De acuerdo con esta regla example.com/blog/whatever será redirigido a example.com/it-blog/whatever.

Otra característica útil de este enfoque es que se reemplaza sólo prefijos. De la misma forma que con los directorios que es posible para redirigir la página, sino para salvar los parámetros de consulta. Podría ser conveniente si existe algún tipo de procesamiento JS de estas consultas parámetros. Con X-AMZ-web-redirección en la localización de metadatos es probable que perder ellos.

Como ya he mencionado la escritura y la lectura de XML podría ser un inconveniente. Para superar este escribí una sencilla herramienta de línea en GWT a convertir texto plano con URLs antiguos y nuevos en el formato XML. Utiliza el predicado KeyPrefixEquals y ejecutar redirección ReplaceKeyPrefixWith.

Por último, de acuerdo con la documentación , si alojamiento de sitios web está desactivada, el soporte de redireccionamiento no es aplicable para este cubo.

Editar: Ver respuesta anterior ya que esta funcionalidad es ahora nativo en AWS

En realidad, no hay. No es una característica incorporada que permite esto, sin embargo, lo que puede hacer es crear su objeto, e incluso si no lo guarda como HTML, se puede aplicar como un archivo HTML.

Por ejemplo:

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

Mira esta página aquí:. Ver el código fuente en él rápidamente

vista de código: http://carltonbale.com.s3.amazonaws.com /distance_chart.png

Se puede ver una explicación aquí:

Punto 8: http://carltonbale.com/9-hidden- características-of-amazon-s3

.htaccess 301 a Amazon S3 redirigir traducción


estilo .htaccess:

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

se traduce en:

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

Probablemente se podría escribir un pequeño script en la línea 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"));

ADVERTENCIA:. Amazon limita el número de reglas de redireccionamiento a 50

AWSCLI le permite hacer esto fácilmente ahora (tipo de)

  1. Haga cubo de seguro es 100% pública
  2. Haga cubo de seguro está en modo de recibimiento del sitio
  3. Se refiere únicamente al sitio usando Está lleno https://<bucket_name>.s3-website-<region>.amazonaws.com URL
  4. Utilice la llamada s3api para establecer el redireccionamiento

    AWS s3api poner a objetos --acl --website-redirección lugar público-leer " http: // otra ubicación .com " --bucket foo-cubo --key algún lugar / bla

Nota: . No publicar cualquier objeto a S3, ya que sólo va a servir a un 301 y redirigir cabecera Location

Prueba con

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top