2013-08-18 34 views
22

Tôi đã thiết lập Amazon S3 để phục vụ trang web tĩnh của mình, speakeasylinguistics.com. Tất cả các công cụ DNS dường như hoạt động tốt, bởi vì dig +recurse +trace www.speakeasylinguistics.com xuất ra thông tin DNS chính xác.Amazon S3 tải xuống index.html thay vì phục vụ

Nhưng khi bạn visit the site in a browser sử dụng điểm cuối, tải xuống trang index.html thay vì được phân phối. Làm thế nào để sửa lỗi này?

Tôi đã dùng thử Chrome, Safari, FF. Nó xảy ra trên tất cả chúng. Tôi đã từng Amazon's walkthrough trên lưu trữ một miền tùy chỉnh cho một T.

+1

chạy curl -I đối với tệp trả về: 'Nội dung-Bố trí: tệp đính kèm' trong tiêu đề - đó là nguyên nhân gây ra sự cố. Tôi nghĩ * có trong dữ liệu meta của tệp. – dc5

+0

Tôi đã giải quyết vấn đề này chỉ định siêu dữ liệu (content-type = text/html) khi tải tệp html lên S3 – PedroHidalgo

Trả lời

25

Chạy -Tôi curl so với url bạn được đăng cho kết quả sau:

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 

Dòng này là thủ phạm:

Content-Disposition: attachment 

Nếu bạn đang sử dụng giao diện điều khiển AWS, tôi tin rằng điều này có thể được thay đổi bằng cách chọn tệp trong S3 và sửa đổi dữ liệu meta của nó bằng cách loại bỏ thuộc tính này.

16

Nếu bạn làm điều này theo lập trình, bạn có thể đặt các thông số ContentType và/hoặc ContentDisposition trong video tải lên của mình.

[PHP Ví dụ]

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

putObject Docs

1

Nếu bạn đang sử dụng Hashicorp Terraform bạn có thể chỉ định content-type trên một aws_s3_bucket_object như sau

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

    content_type = "text/html" 
} 

này sẽ phục vụ nội dung của bạn một cách thích hợp trong trình duyệt.

Các vấn đề liên quan