2014-05-05 13 views
36

Nel servire un sito statico fuori da Amazon S3, mi chiedo come sbarazzarsi delle estensioni di file .html per ogni pagina.Pagine statiche S3 senza estensione .html

In questo momento ho:

mysite.com/    # works fine, serves index.html 
mysite.com/mypage.html # works fine 
mysite.com/mypage  # doesn't work 

L'errore per /mypage spettacoli:

404 Not Found 

Code: NoSuchKey 
Message: The specified key does not exist. 
Key: mypage 
RequestId: 1089D7A26EFED9AD 
HostId: Ud8cFy8Zl1mJ+oFjFOmU1Xacq9+v70KuaJfOc4nFMEPhd66AkLhr4Pj5u0QH6Gog 

ho provato impostando la Content-Type a text/html, come da this post, ma non risolve il problema per me.

Come ottengo /mypage per servire il file a /mypage.html su S3?

risposta

48

Ho appena avuto questo problema e mi piacerebbe condividere la soluzione:

È necessario impostare i metadati del file Content-type a text/html e rinominare il file rimuovendo il .html della fine.

In questo modo sarete in grado di raggiungere ogni pagina senza l'estensione del file.

+0

Come si modifica l'intestazione 'Content-type' negli strumenti della riga di comando?O nella console di S3 o Cloudfront? – Costa

+2

@Costa, ho avuto successo modificando l'intestazione 'Content-type' usando il seguente nella console (Windows): ' aws s3 cp C: \ cartella \ file s3: // cartella/file --content-type "text/html" ' Riferimento: http://docs.aws.amazon.com/cli/latest/reference/s3/cp.html – jeremy

+0

Ho visto questa soluzione in tutto il web ma rimuovere l'estensione del file è sporca per me. Questo è ancora il metodo raccomandato per gli URL piuttosto su S3? –

11

In generale su Amazon S3, per creare gli URL semplificati è possibile:

  1. Carica il file di paging con un nome "pulito", per esempio mypage e impostare Content-Type impostato su text/html (come il post collegato a descritto). È necessario rinominare il file sul proprio sistema prima di caricarlo per non avere estensione, oppure rename senza l'estensione su S3 dopo il caricamento. Il nome del file su S3 non deve avere un'estensione.

  2. Creare una cartella con il nome "pulito" e caricare il file di pagina in quella cartella con il suo nome impostato su default index document, ad es. index.html. È necessario verificare qual è il nome del documento indice predefinito. Questo è impostato quando si configura il bucket come sito Web, ma può essere modificato in seguito.

Se non è possibile effettuare il lavoro di cui sopra è possibile caricare un nuovo oggetto di zero byte con il nome della chiave mypage e quindi impostare una pagina di reindirizzamento specificando la chiave Website Redirect Location con un valore mypage.html nei metadati durante la processo di caricamento. Vedere Configurazione di un reindirizzamento di pagine Web nella documentazione di Amazon S3.

È anche possibile copiare il file in un nuovo oggetto denominato mypage con Content-Type impostato su text/html.

+0

l'approccio oggetto di zero byte fa un redirect da 'mypage' a' mypage.html', quindi in realtà non sbarazzarsi della estensione '.html'. Ho anche provato entrambi i tuoi approcci in 1 & 2, e nessuno dei due lavora per me. Qualche idea del perché questo potrebbe essere il caso? – tyler

+0

Il reindirizzamento è quello che ho preso la tua domanda "Come posso ottenere/mypage per servire il file in /mypage.html" per significare. Dici di seguito che il mio approccio in (2) funziona. Il "documento indice" può essere impostato su qualsiasi cosa (non ho potuto aggiungere un collegamento per i documenti Amazon nella mia risposta). Per approccio (1), come hai chiamato la pagina che volevi pubblicare? – jamtin

+0

Come si modifica il tipo di contenuto su s3? O cloudfront? – Costa

4

Creare una cartella a /mypage e inserire index.html all'interno di esso non funzionava per me. Si scopre che questo era perché impostazione "Index documento" del secchio era stato cambiato in myindex.html:

Bucket Properties --> Static Website Hosting --> Enable Website Hosting --> Index Document 

Questo è stato effettivamente applicato a tutte le sottocartelle troppo, in modo che non era alla ricerca di /mypage/index.html quando sulla /mypage itinerario; cercava invece /mypage/myindex.html.

Ho semplicemente modificato l'impostazione myindex.html su index.html e la struttura di cartelle standard funziona. Avrebbe funzionato allo stesso modo per utilizzare i file myindex.html ovunque con quell'impostazione, ma ciò sembrava confuso senza alcun guadagno reale.

Ancora non so perché l'impostazione di Content-Type su text/html non funziona, sembra come dovrebbe, poiché viene menzionata in più punti.

In ogni caso, il problema viene risolto cambiando il numero Index Document della Benna e tutte le sottocartelle per utilizzare index.html.

+1

Non so se qualcosa è cambiato, ma non ci sono opzioni per impostare la pagina indice predefinita su qualcosa di diverso dal bucket stesso. Inoltre, le proprietà sulle directory all'interno dei bucket non consentono di impostarle. Quindi questa tecnica non sembra funzionare. Gradirei chiarimenti se questa risposta funzionasse ancora. Grazie. –

1

Soluzione molto semplice e testata. :

  1. Rinomina file, Rimuovi estensione (.html) dal nome file. (ad esempio, cambia galleria.html in galleria).
  2. Modifica proprietà del file. Aggiungi la chiave Metadata (tipo di contenuto = testo/html e lingua del contenuto = html).
  3. Salvare e testare dall'URL del browser come websiteurl.com/gallery.
3

come alcuni hanno detto già, eliminare l'estensione del file, ma poi semplicemente seguire i seguenti passi:

  1. Vai al tuo secchio Amazon S3.
  2. Seleziona la casella di controllo accanto al file che desideri collegare correttamente.
  3. Fare clic su "Proprietà" sulla destra e verrà visualizzato un nuovo riquadro. Verrà visualizzato "Oggetto: nome file"
  4. Fare clic sulla scheda Metadati, modificare l'impostazione predefinita, che per me era "binary/octet-stream"; il nuovo valore dovrebbe essere "text/html".
  5. Salva.

E come si è detto, assicurati che i tuoi nuovi collegamenti nel tuo html non contengano più l'estensione del file .html. Questo ha funzionato per me.

2

Con l'AWS CLI:

Supponendo di aver rimosso l'estensione dal nome del file e impostare AWS CLI con il tuo account, è possibile impostare i metadati del file eseguendo questo comando nella console :

aws s3 cp /path/to/file s3://yourwebsite.com --content-type 'text/html' --acl public-read 
Problemi correlati