J'essaie de faire fonctionner les redirections dans un nom de domaine pour un site Web statique hébergé sur S3. C'est-à-dire que si je pointe mydomain.com/foo, je veux qu'il redirige vers mydomain.com ; cela devrait essentiellement refléter mydomain.com.s3-website-us-east-1.amazonaws.com/foo redirigé vers mydomain.com.s3-website-us-east-1.amazonaws.com. Ce qui se passe actuellement, c'est que mydomain.com/foo est redirigé vers mydomain.com.s3-website-us-east-1.amazonaws.com/.

J'ai un compartiment S3 nommé conformément à la documentation Amazon afin de garantir que les ressources sont correctement redirigées. J'ai également configuré CloudFront pour pointer vers le point de terminaison du site Web S3 (mydomain.com.s3-website-us-east-1.amazonaws.com), ainsi que le domaine configuré dans « Noms de domaine alternatifs (CNAME) ».

Dans Route53, j'ai créé un enregistrement A pour pointer vers le nom de domaine d123456789.cloudfront.net de CloudFront. Donc, en ce moment, aller sur mydomain.com fonctionne très bien ; Cependant, essayer d'accéder à une ressource qui provoquerait une redirection me ramène au nom S3 laid.

Comment puis-je garder CloudFront dans le mix mais obtenir un comportement de redirection convivial qui maintient mon nom de domaine au premier plan ?

Edit : à des fins d'exemple, j'essaie simplement de rediriger /télécharger vers / ; voici comment j'ai configuré cela: Capture d'écran de la redirection S3

Edit 2 : Pour clarifier, la redirection de foo.com/update vers foo.com/index.html est le cas minimal ; idéalement, j'aimerais pouvoir rediriger n'importe quelle ressource sous foo.com/ vers foo.com/index.html, c'est pourquoi je poursuivais la solution des règles de redirection.

answer

Vous devez spécifier le nom d'hôte et le protocole cible dans les règles de routage. Cela oblige le Location:à avoir le nom d'hôte correct (souhaité).

L'approche la plus simple pour rediriger presque tout est de créer une règle de routage qui correspond 403 Forbidden(puisque S3 nie tout par défaut) et des points où vous voulez que les choses aillent.

<RoutingRules>
 <RoutingRule>
  <Condition>
    <HttpErrorCodeReturnedEquals>403</HttpErrorCodeReturnedEquals>
  </Condition>
  <Redirect>
   <Protocol>https</Protocol> 
   <HostName>target.example.com</HostName>
   <ReplaceKeyWith></ReplaceKeyWith>
  </Redirect>
 </RoutingRule>
</RoutingRules>

Toutes les demandes doivent être redirigées vers https://target.example.com/, à moins que l'URL demandée corresponde à un objet existant avec l' public-readACL ou à un document d'index.

Si cela ne se comporte pas comme prévu, vous pouvez également le modifier pour qu'il corresponde à 404, mais ne le faites pas. Si 404 fonctionne, cela signifie que votre stratégie de compartiment est trop permissive, permettant aux utilisateurs non authentifiés de répertorier le contenu de votre compartiment... alors, ne changez pas cela - corrigez votre stratégie. Utilisez 403 ici.

Vous n'avez pas besoin d'utiliser les règles de routage de redirection avancées pour cela. Téléchargez simplement un objet de zéro octet avec le nom de la redirection et définissez une redirection sous les métadonnées. Ceci est documenté ici .

Un problème est que vous devez y accéder en utilisant le format d'URL ci-dessous, ou sur le domaine réel, comme décrit dans ce cas d'assistance (connexion AWS requise).

http://BUCKET_NAME.s3-website-ap-southeast-2.amazonaws.com/index.html

Cela fonctionne très bien avec S3 accessible directement, avec ou sans Route53 utilisé pour le DNS.

Mise à jour : j'en ai fait un exemple en utilisant S3 et CloudFront, que je vais laisser de côté pendant quelques jours, mais je fournirai des captures d'écran pour montrer ce que j'ai fait afin que cela puisse servir d'exemple permanent. Vous pouvez essayer la redirection ici - le fichier redir.html doit être redirigé vers index.html.

Cela fonctionne bien lorsque vous y accédez via CloudFront, mais vous devez taper votre origine dans CF manuellement, plutôt que d'utiliser la liste déroulante. Informations ici . En effet, seuls les points de terminaison du site Web prennent en charge les informations de redirection ici .

Voici comment j'ai configuré la redirection sur S3 entrez la description de l'image ici

Voici un exemple de redirection vers un site externe ( lien ) entrez la description de l'image ici

Voici comment j'ai configuré CloudFlare avec un cname pour cloudfront entrez la description de l'image ici