« Trop de redirections » veut dire que deux règles ne s'accordent pas et se défont mutuellement : l'une envoie http vers https, autre chose renvoie https vers http, et le navigateur abandonne après vingt allers-retours.

Voir la chaîne

Ne devinez pas depuis le navigateur. Imprimez chaque saut avec son statut et sa destination.

curl -sIL https://yourdomain.com | grep -E "HTTP/|location:"

La paire qui se répète dans cette sortie, c'est le combat. Elle nomme les deux camps.

Les quatre paires qui en sont la cause

  • Une adresse de site dans le CMS qui contredit le serveur. WordPress réglé en http pendant que le serveur impose https : chacun corrige l'autre, à l'infini.
  • Des règles www et sans-www qui se pointent l'une l'autre. Choisissez un hôte canonique et laissez l'autre y rediriger, une fois.
  • Un proxy devant qui termine le TLS. Le serveur voit du http tout nu, décide que le visiteur a besoin de https, et redirige une requête qui est déjà en https. Il lui faut lire X-Forwarded-Proto.
  • Une règle de barre finale qui l'ajoute et une autre qui la retire.

WordPress en particulier

define('WP_HOME','https://yourdomain.com');
define('WP_SITEURL','https://yourdomain.com');

Fixer les deux dans wp-config.php les épingle et met fin au combat entre la valeur en base et le serveur.

Derrière un proxy ou un CDN, ajoutez $_SERVER["HTTPS"] = "on"; quand X-Forwarded-Proto vaut https, avant le chargement de WordPress. Sans cela, le site ne peut pas savoir qu'il est déjà sécurisé.
Videz le cache du navigateur avant de tester. Une 301 est mise en cache durement, et vous continuerez de voir une boucle qui n'existe plus.