我已将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。
答案 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,
));
答案 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
答案 6 :(得分:0)
对于遇到此问题的其他人,您可以在 Properties > Static website hosting
下找到 URL 中的拼写错误。例如,提供的 URL 是
http://{bucket}.s3-website-{region}.amazonaws.com
但应该是
http://{bucket}.s3-website.{region}.amazonaws.com
注意 .
和 website
之间的 region
。