what the stand rrs redirection placed only objects name maximum for does aws amazon-web-services amazon-s3 http-redirect

amazon web services - the - Redireccionamiento de objeto Amazon S3



what does s3 stand for? (6)

¿Es posible poner un encabezado de redirección en un objeto s3? Como un redireccionamiento 301.

Por ejemplo:

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

Preferiblemente al establecer un encabezado como este en el objeto:

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


En caso de que el alojamiento del sitio web esté habilitado para el depósito, existe una forma alternativa de agregar el redireccionamiento 301. De acuerdo con esto, las reglas de redirección se describen en el nivel de depósito en formato XML y se pueden especificar en las propiedades del depósito a través de la consola AWS S3 (sección de alojamiento de sitio web estático). La documentación completa sobre su sintaxis actualmente se puede encontrar here .

Este enfoque es conveniente cuando tiene movimientos masivos de URL en la medida en que es más fácil administrar todas las redirecciones en un solo lugar. Por ejemplo, es posible definir reglas de redirección

<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 especificar metadatos x-amz-sitio-ubicación de redireccionamiento para ellos. La mala noticia es que no podría haber más de 50 reglas en XML para un solo segmento. Y sí, no es conveniente administrar XML. Pero para mí, de esta manera es más fácil en este momento. De nuevo, porque es más fácil administrar todos los archivos en un solo lugar.

Este enfoque XML es extremadamente útil cuando, por ejemplo, renombra un directorio con muchas páginas. En este caso, es necesario crear una regla de redirección única para el directorio, en lugar de una regla separada para cada página dentro de ella. 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á redireccionado a example.com/it-blog/whatever .

Otra característica útil de dicho enfoque es que reemplaza solo los prefijos. Del mismo modo que con los directorios, es posible redirigir la página, pero guardar los parámetros de consulta. Podría ser adecuado si hay algún procesamiento JS de estos parámetros de consulta. Con los metadatos x-amz-site-redirect-location probablemente los perderás.

Como mencioné, escribir y leer XML podría ser un inconveniente. Para superar esto, escribí una herramienta en línea simple en GWT para convertir texto sin formato con URL anteriores y nuevas en formato XML. Utiliza el predicado KeyPrefixEquals y ejecuta ReplaceKeyPrefixWith redirect.

Finalmente, de acuerdo con la documentation , si el alojamiento del sitio web está deshabilitado, el soporte de redireccionamiento no es aplicable para este segmento.




AWSCLI te permite hacer esto fácilmente ahora (más o menos)

  1. Asegúrate de que el cubo sea 100% público
  2. Asegúrate de que el depósito esté en modo Alojamiento de sitio web
  3. Solo consulte el sitio usando su URL completa https://<bucket_name>.s3-website-<region>.amazonaws.com
  4. Use la llamada s3api para establecer la redirección

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

Nota : No publica ningún objeto en S3, ya que solo servirá un 301 y redirigirá el encabezado de Location .

Prueba con

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


Editar: vea la respuesta anterior, ya que esta funcionalidad ahora es nativa en AWS

No, realmente no. No hay una característica incorporada que permita esto, sin embargo, lo que puede hacer es crear su objeto e incluso si no lo guarda como HTML, puede aplicarlo 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>

Mire esta página aquí: vea la fuente en ella rápidamente.

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

Puedes ver una explicación aquí:

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


htaccess 301 a la traducción de redirección de Amazon S3

estilo htaccess:

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

se traduce a:

<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 puedas escribir un pequeño guión de la siguiente manera:

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