web-dev-qa-db-fra.com

Correctement rediriger un site vers WWW et HTTPS

J'ai récemment découvert un problème dans le fichier .htaccess de mon site Web. Lorsque j'ai démarré le site, j'ai effectué une redirection 301 pour rediriger toutes les demandes non-www et http vers www avec https. J'ai ajouté ces lignes de code et cela a très bien fonctionné.

RewriteCond %{SERVER_PORT} 80 [OR]
RewriteCond %{HTTP_Host} !^www\.
RewriteRule (.*) https://www.example.com/$1 [R=301,L]

De plus, j'ai soumis les 4 variantes de mes URL aux outils Google pour les webmasters. J'ai vu qu'ils ont utilisé https: // www dans les résultats des moteurs de recherche. Puis plus tard, lorsque j'ai essayé de modifier le code .htaccess, il n'y avait aucune règle que j'avais précédemment ajoutée. Mais la redirection fonctionnait toujours comme il se doit.

Est-ce normal? Je n'ai pas utilisé les balises <IfModule mod_rewrite.c> lors de l'ajout du code. Est-ce correct ou dois-je ajouter ces balises d'ouverture et de fermeture et l'ajouter à nouveau?

5
Anjana Nilupul

Puis plus tard, lorsque j'ai essayé de modifier le code .htaccess, il n'y avait aucune règle que j'avais précédemment ajoutée. Mais la redirection fonctionnait toujours comme il se doit.

Les redirections 301 sont mises en mémoire cache par le navigateur. Par conséquent, si les redirections ne figurent plus dans le fichier .htaccess (ou déplacées vers la configuration du serveur), il est fort possible que vous voyiez une réponse mise en cache. Videz le cache de votre navigateur et testez à nouveau.

Avez-vous la sécurité HSTS (HTTP Strict Transport Security) activée sur votre domaine? Si oui, alors après la demande HTTPS initiale, le navigateur demandera toujours (ou plutôt, pour une période de temps donnée) la version HTTPS automatiquement. Cela n’exigera pas non plus la directive de redirection (après la requête initiale), mais les nouveaux utilisateurs ne seront pas redirigés tant qu’ils n’auront pas visité la version HTTPS.

Il est également possible que votre code côté serveur (CMS/WordPress?) Effectue cette canonisation et soit redirigé vers votre URL canonique. À la fin de la journée, vous avez besoin d'une "redirection" quelque part dans votre code pour le site afin de rediriger , cela ne se produit pas par magie.

  1. Est-ce normal?

Les directives "disparaissant" de .htaccess ne sont pas normales. Bien qu'il soit possible que les mises à jour de votre CMS (par exemple WordPress ??) aient pu les écraser. (?)

  1. Je n'ai pas utilisé les balises <IfModule mod_rewrite.c> lors de l'ajout du code. Est-ce correct ou dois-je ajouter ces balises d'ouverture et de fermeture et l'ajouter à nouveau?

Vous n'avez pas besoin du wrapper <IfModule>. En fait, il vaut probablement mieux ne pas l'avoir. Le wrapper <IfModule mod_rewrite.c> n'est requis que si votre site est conçu pour fonctionner "normalement" sans mod_rewrite ou si vous avez d'autres modules dépendant de mod_rewrite.

Notez que si vous utilisez WordPress ... WordPress utilise le wrapper <IfModule> car il est conçu pour une compatibilité maximale et peut fonctionner sans que mod_rewrite ne soit installé. Mais si mod_rewite n'est pas disponible, vous perdez certaines capacités de formatage d'URL.

  1. Si vous avez un meilleur moyen de faire la redirection ...

Cette redirection a l'air bien . La seule raison de le changer serait si ça ne marche pas. (Par exemple, vous avez commencé à servir HTTP depuis un port différent ou quelque chose de ce genre?) La seule amélioration serait d'utiliser plutôt la configuration de votre serveur et de désactiver .htaccess.

2
MrWhite

Essayez ceci et voyez si cela aide.

RewriteCond %{HTTP_Host} ^yourdomain\.com$ [OR]

RewriteCond %{HTTPS} !on

RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R=301,L]
0
Chaoley