Amazon S3对象重定向

Mar*_*tin 48 amazon-s3 http-redirect amazon-web-services

是否可以在s3对象上放置重定向标头?像301重定向一样.

例如:

mybucket.amazon-aws.com/myobject --> example.com/test
Run Code Online (Sandbox Code Playgroud)

最好通过在对象上设置这样的标题:

HTTP/1.1 301 Moved Permanently
Location: http://example.com/test
Content-Type: text/html
Content-Length: 0
Run Code Online (Sandbox Code Playgroud)

Lay*_*yke 40

在过去一个月内,刚刚添加了此功能.

您可以在此处找到API文档:

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

当您输出对象时,需要将x-amz-website-redirect-location针对该对象的键设置为您希望使用的301重定向.

您也可以使用控制台.

在此输入图像描述

  • 这对任意对象都有效吗?或者只是为了他们特殊的 HTML 静态网站内容? (2认同)
  • 不幸的是,不支持通配符,因此我无法进行重定向以删除静态站点上尾随的“/index.html”。 (2认同)

Dmi*_*rev 14

如果为存储桶启用了网站托管,则可以使用另一种方法添加301重定向.根据它,重定向规则在XML级格式的存储桶级别进行描述,并且可以通过AWS S3控制台(静态网站托管部分)在存储桶的属性中指定.目前可以在此处找到有关其语法的完整文档.

只要在一个地方更容易管理所有重定向,您就可以轻松地进行大量的URL移动.例如,可以定义重定向规则

<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>
Run Code Online (Sandbox Code Playgroud)

看起来它与创建假对象和为它们指定x-amz-website-redirect-location元数据相同.坏消息是,对于一个存储桶,XML中的规则可能不超过50个.是的,管理XML并不方便.但对我来说,这种方式目前更容易.同样,因为在一个地方管理所有文件更容易.

例如,当您重命名包含大量页面的目录时,这种XML方法非常有用.在这种情况下,有必要为目录创建单个重定向规则,而不是为其中的每个页面创建单独的规则.例如

<RoutingRule>
    <Condition>
        <KeyPrefixEquals>blog/</KeyPrefixEquals>
    </Condition>
    <Redirect>
        <ReplaceKeyPrefixWith>it-blog/</ReplaceKeyPrefixWith>
    </Redirect>
</RoutingRule>
Run Code Online (Sandbox Code Playgroud)

根据这条规则example.com/blog/whatever将被重定向到example.com/it-blog/whatever.

这种方法的另一个有用特征是它只替换前缀.与目录相同,可以重定向页面,但保存查询参数.如果对这些查询参数进行了一些JS处理,那么它可能是合适的.使用x-amz-website-redirect-location元数据,您可能会松开它们.

正如我提到的,编写和阅读XML可能不方便.为了克服这个问题,我 在GWT中编写了一个简单的在线工具,将原始文本和新URL转换为XML格式.它使用 KeyPrefixEquals谓词并执行ReplaceKeyPrefixWith重定向.

最后,根据文档,如果禁用了网站托管,则重定向支持不适用于此存储桶.


Lay*_*yke 7

编辑:请参阅上面的答案,因为此功能现在在AWS中是原生的

不是真的没有.没有内置功能允许这样做,但是,您可以做的是创建对象,即使您不将其保存为HTML,也可以将其应用为HTML文件.

例如:

<!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>
Run Code Online (Sandbox Code Playgroud)

在这里查看此页面:快速查看其中的源代码.

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

你可以在这里看到解释:

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