Amazon S3下载index.html而非服务

时间:2013-08-18 07:49:21

标签: amazon-s3

我已将Amazon S3设置为我的静态网站speakeasylinguistics.com。所有的DNS东西似乎都运行正常,因为dig +recurse +trace www.speakeasylinguistics.com会输出正确的DNS信息。

但是当您visit the site in a browser使用端点时,index.html页面会下载而不是投放。我该如何解决这个问题?

我尝试过Chrome,Safari,FF。它发生在所有这些上。我使用Amazon's walkthrough将自定义域托管到T。

7 个答案:

答案 0 :(得分:37)

针对您发布的网址运行curl -I会产生以下结果:

curl -I http://speakeasylinguistics.com.s3-website-us-east-1.amazonaws.com/
HTTP/1.1 200 OK
x-amz-id-2: DmfUpbglWQ/evhF3pTiXYf6c+gIE8j0F6mw7VmATOpfc29V5tb5YTeojC68jE7Rd
x-amz-request-id: E233603809AF9956
Date: Sun, 18 Aug 2013 07:58:55 GMT
Content-Disposition: attachment
Last-Modified: Sun, 18 Aug 2013 07:05:20 GMT
ETag: "eacded76ceb4831aaeae2805c892fa1c"
Content-Type: text/html
Content-Length: 2585
Server: AmazonS3

这条线是罪魁祸首:

Content-Disposition: attachment

如果您使用的是AWS控制台,我相信可以通过选择S3中的文件并通过删除此属性来修改其元数据来更改此内容。

答案 1 :(得分:22)

如果您以编程方式执行此操作,则可以在上传中设置ContentType和/或ContentDisposition参数。

[PHP示例]

      $output = $s3->putObject(array(
          'Bucket' => $bucket,
          'Key' => md5($share). '.html',
          'ContentType' => 'text/html',
          'Body' => $share,
      ));

putObject Docs

答案 2 :(得分:9)

如果您使用的是Hashicorp Terraform,则可以在aws_s3_bucket_object上指定content-type,如下所示

resource "aws_s3_bucket_object" "index" {
  bucket = "yourbucketnamehere"
  key = "index.html"
  content = "<h1>Hello, world</h1>"

  content_type = "text/html"
}

这应该在浏览器中适当地提供您的内容。

答案 3 :(得分:1)

如果您尝试使用Boto3和python 3.7或更高版本上载,请尝试

s3 = boto3.client('s3')
S3.upload_file(local_file,bucket,S3_file,ExtraArgs={'ContentType':'text/html'})

用于更新内容类型

答案 4 :(得分:0)

如果您使用的是AWS S3 Bitbucket Pipelines Python,请添加参数 content_type ,如下所示:

s3_upload.py

Feature: Logout user from application

  Scenario: Logout user
    * driver.click('#user-dropdown')
    * driver.click('#logout-button')

并按如下所示修改 bitbucket-pipelines.yml

def upload_to_s3(bucket, artefact, bucket_key, content_type):
...

def main():
...
    parser.add_argument("content_type", help="Content Type File")
...

if not upload_to_s3(args.bucket, args.artefact, args.bucket_key, args.content_type):

content_type 参数可以是以下项之一:MIME types (IANA media types)

答案 5 :(得分:0)

我最近遇到了同样的问题,问题是 CloudFront 和 S3 Origin 的行为发生了变化, 如果您的 S3Bucket 配置为为静态网站提供服务,则需要将源更改为 HTTPS:// 端点,而不是从下拉列表中选择 S3 源,如果您使用 terraform,则源应为 aws_s3_bucket.var。< strong>website_endpoint 而不是 aws_s3_bucket.var。bucket_domain_name

参考AWS documentation here

答案 6 :(得分:0)

对于遇到此问题的其他人,您可以在 Properties > Static website hosting 下找到 URL 中的拼写错误。例如,提供的 URL 是

http://{bucket}.s3-website-{region}.amazonaws.com

但应该是

http://{bucket}.s3-website.{region}.amazonaws.com

注意 .website 之间的 region