Amazon S3 objeto de redireccionamiento
-
20-09-2019 - |
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
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.
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.
La capacidad se ha añadido recientemente: http://aws.typepad.com/aws/2012/10/amazon-s3-support-for-website-redirects.html
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)
- Haga cubo de seguro es 100% pública
- Haga cubo de seguro está en modo de recibimiento del sitio
- Se refiere únicamente al sitio usando Está lleno
https://<bucket_name>.s3-website-<region>.amazonaws.com
URL -
Utilice la llamada
s3api
para establecer el redireccionamientoAWS 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