Redirection de www vers non-www pour HTTP et HTTPS

Je tente de redirect www vers non-www pour les deux requêtes HTTP et HTTPS. Ma racine .htaccess ressemble à ceci:

RewriteEngine on RewriteCond %{HTTP_HOST} ^www.example.com$ RewriteRule ^(.*)$ http://example.com/$1 [R=301] RewriteCond %{HTTP_HOST} ^www.example.com$ RewriteCond %{SERVER_PORT} ^443 RewriteRule ^(.*)$ https://example.com/$1 [R=301] 

Cela ne fonctionne pas complètement comme prévu. Ce qui se produit:

La visite de http://www.example.com entraîne une redirection vers http://example.com . Cela indique que ma première règle et ma première condition fonctionnent, que le module mod_rewite est hunky-dory et que .htaccess est activé sur OK.

La visite de https://www.example.com n’entraîne pas de redirection. Je rest sur https://www.example.com

Ma question

Pour que les règles de réécriture ci-dessus fonctionnent, mon serveur doit-il avoir un certificate SSL? Il ne le fait pas actuellement et je me demande si c’est la raison pour laquelle les choses ne fonctionnent pas.

La première règle a priorité sur la requête https car elle remplissait simplement la condition de réécriture. La première règle indique essentiellement qui correspond au domaine et vous pouvez lancer votre rewriterule. Ajoutez plutôt une autre condition qui indique si sa requête n’est pas https

Alors essayez ceci:

 RewriteEngine on RewriteCond %{HTTP_HOST} ^www.example.com$ RewriteCond %{SERVER_PORT} !^443 RewriteRule ^(.*)$ http://example.com/$1 [L, R=301] RewriteCond %{HTTP_HOST} ^www.example.com$ RewriteCond %{SERVER_PORT} ^443 RewriteRule ^(.*)$ https://example.com/$1 [L, R=301] 

Vous avez besoin d’un certificate ssl pour que le protocole https fonctionne

J’ai aussi ajouté le drapeau [L] qui dit de ne pas traiter d’autres règles

Vous pourriez peut-être essayer ce qui suit:

 RewriteEngine on # Check if the host contains "www." RewriteCond %{HTTP_HOST} ^www\. # Check if we're using HTTPS RewriteCond %{HTTPS}s ^on(s)|off RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)?(.+)$ # Redirect accordingly RewriteRule ^ %1%3%{REQUEST_URI} [R=301,L]