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.
En el último mes, esta funcionalidad acaba de agregarse.
Puede encontrar la documentación de la API aquí:
http://docs.amazonwebservices.com/AmazonS3/latest/dev/how-to-page-redirect.html
Cuando PONE su objeto, necesita establecer la clave x-amz-website-redirect-location
contra ese objeto al redireccionamiento 301 que desea usar.
También puedes usar la consola.
La capacidad se ha agregado recientemente: http://aws.typepad.com/aws/2012/10/amazon-s3-support-for-website-redirects.html
AWSCLI te permite hacer esto fácilmente ahora (más o menos)
- Asegúrate de que el cubo sea 100% público
- Asegúrate de que el depósito esté en modo Alojamiento de sitio web
- Solo consulte el sitio usando su URL completa
https://<bucket_name>.s3-website-<region>.amazonaws.com
Use la llamada
s3api
para establecer la redirecciónAws 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.