web-dev-qa-db-fra.com

Redirection HTTP vers HTTPS: comment ne pas créer une boucle infinie

J'ai un WordPress installé sur un sous-domaine: https://blog.example.com

Pour appliquer SSL, j'ai les redirections suivantes dans mon .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On

# BEGIN FORCE HTTPS
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{HTTP_Host}/$1 [R=301]
# END FORCE HTTPS

# BEGIN WordPress
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

</IfModule>

Cela fonctionnait jusqu'à il y a un moment. Maintenant, en appelant http://blog.example.com, je reçois:

déplacé en permanence

Le document a été déplacé ici.

En outre, une erreur 500 Internal Server Error s'est produite lors de la tentative d'utilisation d'un ErrorDocument pour gérer la demande.

Le mot "ici" dans la ligne 2 renvoie à http://blog.example.com.

Quel est le problème avec le .htaccess?

J'ai vérifié les paramètres WordPress et ils ne sont pas le problème: l'URL du site est correctement définie sur https://blog.example.com.

1
bootsmaat

J'ai été capable de le résoudre en changeant le .htaccess comme ceci:

<IfModule mod_rewrite.c>
RewriteEngine On

# BEGIN FORCE HTTPS
RewriteCond %{HTTPS} !=on
RewriteCond %{ENV:HTTPS} !=on
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]*
# END FORCE HTTPS

# BEGIN WordPress
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

</IfModule>
1
bootsmaat

C'est vraiment une information supplémentaire puisque vous semblez déjà avoir trouvé votre solution, mais quand même ...

RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{HTTP_Host}/$1 [R=301]

Je ne pense pas que cela aurait jamais fonctionné comme prévu car il vous manque le drapeau L (last) sur le RewriteRule. Si cela semblait "fonctionner" avant, je suppose que WordPress lui-même était en train de publier la redirection appropriée?

Puisque l'indicateur L est omis ici, le moteur de réécriture aurait continué sur votre contrôleur frontal et réécrit en interne l'URL sur index.php. Si WordPress n'intervenait pas, un code d'état 301 aurait été renvoyé au client, mais sans en-tête de réponse HTTP Location (requis pour la redirection externe). Cela aurait pu être potentiellement dommageable pour le référencement.

Cependant, en soi, cela n'explique pas la boucle de redirection. Cela est peut-être dû à une modification de l’implémentation SSL sur votre serveur, comme le suggère votre réponse.

1
MrWhite

Puisque vous utilisez WordPress, vous pouvez toujours remplacer les deux premières entrées de la table wp_options par votre domaine https.

Pour cela, vous pouvez également ajouter Site Home et WP Home dans le fichier wp-config.php. Voici le lien vers le codex pertinent .

0
Prasad Ajinkya