2013-08-18 27 views
22

Ho impostato Amazon S3 per servire il mio sito statico, speakeasylinguistics.com. Tutta la roba DNS sembra funzionare correttamente, perché dig +recurse +trace www.speakeasylinguistics.com restituisce le informazioni DNS corrette.Amazon S3 scarica index.html invece di servire

Tuttavia, quando si utilizza l'endpoint visit the site in a browser, viene scaricato il download della pagina index.html anziché essere servito. Come posso risolvere questo?

Ho provato Chrome, Safari, FF. Succede su tutti loro. Ho usato Amazon's walkthrough su hosting di un dominio personalizzato a un T.

+1

curl in esecuzione -I contro il file restituisce: 'Content-Disposition: attachment' nelle intestazioni - questo è ciò che sta causando il problema. Penso * che sia nei metadati del file. – dc5

+0

Ho risolto questo problema specificando i metadati (content-type = text/html) durante il caricamento del file html su S3 – PedroHidalgo

risposta

25

Esecuzione ricciolo -I contro l'url che hai postato dà il seguente risultato:

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 

questa linea è il colpevole:

Content-Disposition: attachment 

Se stai utilizzando la console AWS, credo che questo possa essere modificato selezionando il file in S3 e modificando i suoi metadati rimuovendo questa proprietà.

16

Se si esegue questa operazione a livello di codice, è possibile impostare i parametri ContentType e/o ContentDisposition nel caricamento.

[PHP Esempio]

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

putObject Docs

1

Se si utilizza Hashicorp Terraform è possibile specificare il content-type su un aws_s3_bucket_object come segue

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

    content_type = "text/html" 
} 

Questo dovrebbe servire sul suo sito web in modo appropriato nel browser.