web-dev-qa-db-fra.com

Pages statiques S3 sans extension .html

En servant un site statique à partir d'Amazon S3, je me demande comment se débarrasser des extensions de fichier .html pour chaque page.

En ce moment j'ai:

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

L'erreur pour /mypage indique:

404 Not Found

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

J'ai essayé de régler le Content-Type sur text/html, comme indiqué dans ce message , mais cela ne résout pas le problème.

Comment faire pour que /mypage serve le fichier à /mypage.html sur S3?

46
Tyler

Je viens d'avoir ce problème et j'aimerais partager la solution:

Vous devez définir les métadonnées du fichier Content-type sur text/html ET renommer le fichier en supprimant le .html de la fin.

De cette façon, vous pourrez accéder à toutes les pages sans l’extension de fichier.

64
André Lucas

En général, sur Amazon S3, pour créer des URL propres, vous pouvez:

  1. Téléchargez le fichier de page avec un nom "propre", par exemple. mypage et définissez le Content-Type défini sur text/html (en tant que message que vous avez lié à décrit). Vous devez renommer le fichier sur votre système avant de le télécharger pour qu’il n’ait pas d’extension, ou renommer sans l’extension sur S3 après le téléchargement. Le nom du fichier sur S3 ne doit pas avoir une extension.

  2. Créez un dossier avec le nom "clean" et chargez le fichier de page dans ce dossier avec son nom défini sur le document d'index default , par exemple. index.html. Vous devez vérifier quel est le nom du document d'index par défaut. Ceci est défini lorsque vous configurez votre compartiment en tant que site Web, mais peut être modifié ultérieurement.

Si vous ne pouvez pas utiliser ce qui précède, vous pouvez télécharger un nouvel objet de zéro octet avec le nom clé mypage, puis définir une redirection de page en spécifiant la clé Website Redirect Location avec une valeur mypage.html dans les métadonnées au cours du processus de téléchargement. Voir Configuration d'une redirection de page Web dans la documentation Amazon S3.

Vous pouvez également copier le fichier dans un nouvel objet nommé mypage avec Content-Type défini sur text/html.

13
jamtin

Comme certains l'ont déjà dit, supprimez l'extension du fichier, mais suivez simplement les étapes suivantes:

  1. Accédez à votre compartiment Amazon S3.
  2. Cochez la case en regard du fichier que vous souhaitez relier correctement.
  3. Cliquez sur "Propriétés" sur la droite, et un nouveau volet apparaîtra. Ça va dire "Objet: nom de fichier"
  4. Cliquez sur l'onglet Métadonnées, changez de valeur par défaut, ce qui pour moi était "binary/octet-stream"; la nouvelle valeur doit être "text/html".
  5. Sauvegarder.

Et comme les gens l’ont dit, assurez-vous que vos nouveaux liens dans votre code HTML ne contiennent plus l'extension de fichier .html. Cela a fonctionné pour moi.

5
BrotherDonkey

Créer un dossier à /mypage et y mettre index.html ne fonctionnait pas. Il s’avère que cela est dû au fait que le paramètre "Index Document" de Bucket a été remplacé par myindex.html:

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

Cela s'appliquait également à tous les sous-dossiers, de sorte qu'il ne cherchait pas /mypage/index.html lorsqu'il se trouvait sur la route /mypage; il recherchait plutôt /mypage/myindex.html

J'ai simplement rétabli le paramètre myindex.html en index.html et la structure de dossiers standard fonctionne. Il aurait tout aussi bien fonctionné d’utiliser des fichiers myindex.html partout avec cette mise en place, mais cela semblait déroutant sans gain réel.

Je ne sais toujours pas pourquoi régler Content-Type sur text/html ne fonctionne pas - il semble que ce soit le cas, comme cela est mentionné à plusieurs endroits.

Quoi qu'il en soit, le problème est résolu en modifiant le Index Document du Bucket et tous les sous-dossiers en utilisant index.html.

4
Tyler

Avec l'AWS CLI:

En supposant que vous ayez supprimé l'extension du nom de fichier et configuré AWS CLI avec votre compte, vous pouvez définir les métadonnées du fichier en exécutant cette commande dans votre console:

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

Solution très simple et testée. :

  1. Renommez le fichier, supprimez l'extension (.html) du nom du fichier. (ex. changez gallery.html en galerie). 
  2. Modifier les propriétés du fichier. Ajouter une clé de métadonnées (type de contenu = text/html et langue du contenu = html). 
  3. Enregistrez et testez à partir de l’URL du navigateur tel que websiteurl.com/gallery.
1
Nirmal Bajpai

Une autre solution possible consiste à utiliser Lambda @ Edge power, référence de la documentation ici .

0
Gianluca Casati

Pour ceux qui utilisaient des collections, j’ai été en mesure de rendre les liens plus jolis en ajoutant un caractère / 

collections:
  my_collection:
   output:true
   permalink: /:collection/:path/
0
Dylan Pierce