web-dev-qa-db-fra.com

Complètement mis en cache par Cloudflare Wordpress rediriger vers HTTPS

J'ai une installation WordPress (WP) située sur un package d'hébergement partagé qui utilise Apache à la racine du domaine (pas un sous-dossier ni un sous-domaine) sans certificat SSL (même auto-signé).

J'ai mis ce domaine derrière Cloudflare (CF) et activé l'option SSL flexible, ainsi que la mise en cache complète via la section des règles de page. Pour pouvoir utiliser le panneau d’administration de WP, il me faut 2 règles qui désactivent le cache (*example.com/wp-login* et *example.com/wp-admin*) avant celle qui met tout en cache (*example.com/*).

Cela fonctionne très bien mais atteint la limite de 3 règles par site Web gratuit et je ne peux pas utiliser la règle qui force la redirection HTTPS. Ainsi, lorsque j’ouvre dans le navigateur http://example.com/, il se charge immédiatement (retourne le statut 200) au lieu de faire une redirection 301 vers https://example.com/, résultat que j’essaie d’atteindre (si je charge directement https://example.com tout fonctionne comme prévu).

J'ai essayé de nombreuses solutions sur Internet mais aucune d'entre elles ne fonctionne comme prévu. En réalité, la plupart d'entre eux fonctionnent, mais uniquement lorsque le site est en mode développement et qu'il n'y a pas de mise en cache. Une fois le mode de développement désactivé, les règles du fichier .htaccess redirigent l'utilisateur vers la version https, mais après cela, il tente une nouvelle redirection vers cette version et le site cesse de fonctionner.

Comme il s'agit d'un hébergement partagé, je ne peux pas consulter les journaux Apache bruts. Je ne peux donc vérifier le code de retour qu'avec curl -I http://example.com et curl -I https://example.com.

Les solutions de travail sans cache que j'ai essayées jusqu'à présent sont assez similaires à celles-ci:

RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://example.com/$1 [R,L]

J'ai également essayé les réécritures recommandées par les FC (selon un billet de blog sur un autre domaine, bien que je n'arrive pas à les trouver sur le lien donné au site des FC à partir de ce message):

RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' 
RewriteRule ^(.*)$ https://example.com/$1 [L]

et

RewriteCond %{HTTP:CF-Visitor} !'"scheme":"http"' 
RewriteRule ^(.*)$ https://example.com/$1 [L] 

mais le résultat est toujours identique à celui décrit ci-dessus - cela fonctionne correctement jusqu'à ce que le mode de développement soit activé et lorsque le cache démarre, la redirection vers https continue, même après le passage à https.

Quelques informations supplémentaires sur la configuration WP:

  • il a cette ligne dans wp-config.php - $_SERVER['HTTPS'] = 'on';

  • J'ai installé le plugin officiel CF

  • J'ai également essayé d'utiliser les plug-ins "CloudFlare Flexible SSL" et "WP Force SSL" mais ils ne semblaient pas fonctionner (ou au moins faire ce dont j'avais besoin), je les ai donc désactivés.

Pour le moment, je suis surtout intéressé par une réponse qui fonctionne pour Apache, mais j'utilise également nginx sur d'autres hôtes et je ne voudrais pas savoir comment résoudre le même problème ici (en supposant qu'il existe réellement car je ne l'ai toujours pas besoin d’utiliser cette configuration spécifique).

Désolé, si ce message est une dupe, mais je ne pourrais trouver nulle part la même question. Aussi, je ne suis pas vraiment sûr si la question devrait aller ici ou à stackoverflow ou wordpress.stackexchange.com ou peut-être même serverfault ...

// EDIT:

Juste pour clarifier, le problème n'apparaît que lorsque l'option "Tout mettre en cache" est sélectionnée dans les règles de page de CF Sans cette option, les redirections .htaccess fonctionnent parfaitement.

2
Sledge Hammer

pour que Flexible SSL fonctionne avec CloudFlare:

Puis effacez votre cache CloudFlare. Vérifiez que votre site fonctionne sans appliquer la redirection HTTP-> HTTPS.

Si cela fonctionne, vous devriez alors pouvoir configurer une redirection dans votre fichier .htaccess comme suit:

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301,NE]

Veuillez consulter: Comment puis-je corriger l'erreur de boucle de redirection infinie après l'activation de Flexible SSL avec WordPress?

1
mjsa