Je suis en train de configurer un nouveau site sur un domaine doté d'un certificat SSL. Le DNS est correctement configuré et je peux accéder au site via les URL http://example.com
ou https://example.com
.
Actuellement, il redirige http://example.com
vers https://example.com
et http://www.example.com
vers https://example.com
.
Cependant, je ne comprends pas vraiment comment cela fonctionne car cela fonctionne même si je supprime le fichier .htaccess
. Si je modifie le .htaccess
pour rediriger en utilisant l’une des techniques que j’ai rencontrées, une erreur "trop de redirections" s’affiche. Il doit y avoir quelque chose d'autre que je ne comprends pas.
Idéalement, j'aimerais qu'il redirige http://example.com/anything
vers https://example.com/anything
Des idées?
Mon serveur utilise CentOS 6.6. Sortie de "uname -r":
2.6.32-504.12.2.el6.x86_64
Peut fournir des informations supplémentaires si nécessaire.
Ajout d'un exemple de code .htaccess qui a causé "trop de redirections":
RewriteCond %{HTTP_Host} ^example.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
Il est fort probable que votre application Web (c'est-à-dire WordPress - mentionné dans les commentaires) émette déjà les redirections HTTP vers HTTPS appropriées et les redirections www vers non-www. Cependant, utiliser .htaccess
est sans doute plus efficace *1et votre application Web n’émettra peut-être pas les bonnes redirections si vous prévoyez d’implémenter HSTS .
(* 1 - Bien que l'utilisation de la configuration de votre serveur principal serait préférable.)
Ajout d'un exemple de code .htaccess qui a causé "trop de redirections":
RewriteCond %{HTTP_Host} ^example.com$ [NC] RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
Ce n'est pas une redirection HTTP vers HTTPS (en fait, ce n'est rien) et il en résultera certainement une boucle de redirection (c'est-à-dire une erreur de navigateur "trop de redirections"). En gros, si l'hôte demandé est example.com
, redirigez-le vers example.com
(quel que soit le protocole). Donc, il redirige simplement vers lui-même.
Comme mentionné dans les commentaires, vous ne pouvez pas implémenter les redirections HTTP vers HTTPS à l'aide de l'interface "redirection" de cPanel. Vous ne pouvez effectuer que des redirections très simples à l’aide de l’interface cPanel, qui est loin d’être parfaite et non dénuée de mises en garde. Et si vous utilisez WordPress, vous ne pouvez même pas configurer de redirections simples à l'aide de cPanel avec une édition manuelle du fichier .htaccess
. (cPanel ajoute toujours le code de redirection à la fin du fichier .htaccess
, ce qui est notamment après le contrôleur frontal WordPress. Ainsi, dans la plupart des cas, les directives de redirection ne sont jamais traitées. La documentation cPanel vous en informe .)
Toutes les directives de redirection que vous ajoutez (à l'aide de mod_rewrite) à votre fichier .htaccess
doivent obligatoirement avant le contrôleur frontal WordPress , c'est à dire. en haut de votre fichier .htaccess
.
Si vous envisagez de mettre en œuvre HSTS , la redirection HTTP vers HTTPS doit être redirigée vers le même hôte , de sorte que HTTP to HTTPS doit aller avant (et être séparé de) la redirection canonique www/non-www. Consultez la réponse de @ jcanepa pour connaître la redirection HTTP vers HTTPS appropriée dans ce scénario. Vous pouvez ensuite suivre cette procédure avec une redirection www vers non-www (qui semble être votre nom d’hôte canonique). Par exemple:
# www to non-www redirect only
# (NB: This must go AFTER the HTTP to HTTPS redirect if implementing HSTS)
RewriteCond %{HTTP_Host} ^www\. [NC]
RewriteRule .* https://example.com%{REQUEST_URI} [R=301,L]
Si, toutefois, vous n'avez pas l'intention d'implémenter HSTS , vous pouvez combiner les redirections HTTP vers HTTPS et www vers non-www canoniques dans une seule redirection (ce qui évite une seconde redirection potentielle). Par exemple:
RewriteEngine On
# HTTP to HTTPS and www to non-www
# (NB: Not suitable for HSTS)
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_Host} ^www\. [NC]
RewriteRule .* https://example.com%{REQUEST_URI} [R=301,L]
Si Apache, je recommanderais de mettre en place un .htaccess à la racine de votre site:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]