.htaccess redirige www vers non-www avec SSL / HTTPS

J’ai plusieurs domaines fonctionnant sous un seul fichier .htaccess, chacun étant sécurisé via SSL. Je dois forcer https sur tous les domaines tout en assurant la redirection de www vers les non-www. Voici ce que j’utilise qui ne fonctionne pas:

RewriteCond %{HTTP_HOST} ^www.%{HTTP_HOST} RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI}/$1 [R=301,L] 

Exemple:

 https://www.strategice.com 

devrait redirect vers …

 https://strategice.com 

Merci d’avance!

www à non www avec https

 RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L] RewriteCond %{HTTPS} !on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

Votre condition ne sera jamais vraie, car elle ressemble à “si (a == a + b)”.

J’essaierais ce qui suit:

 RewriteCond %{HTTP_HOST} ^www\.(.*) RewriteRule ^.*$ https://%1/$1 [R=301,L] 

Cela capturera “google.com” de “www.google.com” dans% 1, le rest dans $ 1 et après cela combinant le 2, quand HTTP_HOST commence avec www (avec ou sans https).

Pour appliquer des règles autres que www et https dans une seule requête, vous pouvez utiliser la règle suivante dans votre htaccess:

 RewriteEngine on RewriteCond %{HTTP_HOST} ^www\. [OR] RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ RewriteRule ^ https://%1%{REQUEST_URI} [NE,L,R] 

Ceci redirige http://www.example.com/ ou https://www.example.com/ vers ssl non-www https://example.com/ .

J’utilise l’indicateur de redirection R Temp à des fins de test et pour éviter la mise en cache du navigateur. Si vous voulez rendre la redirection permanente, changez simplement l’indicateur R à R = 301 .

Le certificate doit couvrir à la fois les https www et non-www. Certains certificates de fournisseur couvrent à la fois pour http://www.xxxx.yyy, mais un seul pour xxxx.yyy.

Activer les réécritures:

 RewriteEngine On 

Faites tout http utiliser https:

 RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://xxx.yyy/$1 [L,R=301] 

Faites uniquement www https utiliser le non-https https:

 RewriteCond %{SERVER_PORT} 443 RewriteCond %{HTTP_HOST} ^www[.].+$ RewriteRule ^(.*)$ https://xxxx.yyy/$1 [L,R=301] 

Ne peut pas traiter les https non-www, sinon une boucle se produit.

Dans [L, R = 301]:

  1. L = Si la règle a été traitée, ne la traitez plus.
  2. R = 301 = Indique au navigateur / robot de faire une redirection permanente.

Plus générique

Une approche plus générique – non dépendante du port – est:

 RewriteCond %{HTTP_HOST} ^www\. RewriteRule ^(.*)$ https://xxxx.yyy/$1 [R=301,QSA] 

pour faire une url avec www laisser tomber.

 RewriteCond %{HTTPS} !on RewriteCond %{HTTPS} !1 RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteCond %{HTTP:X-Forwarded-SSL} !on RewriteRule ^(.*)$ https://xxxx.yyy/$1 [R=301,QSA] 

pour forcer toute URL non https, même pour les systèmes en aval des équilibreurs de charge qui suppriment https, utilisez https.

Notez que je n’ai pas testé les options forwarded , alors je vous serais reconnaissant de recevoir des commentaires sur ces problèmes. Ces lignes peuvent être omises si votre système n’est pas derrière un équilibreur de charge.

TO HTTP_HOST ou non

Vous pouvez utiliser ${HTTP_HOST} pour faire partie de l’URL du RewriteRule ou utiliser le texte explicite de votre nom de domaine canonique ( xxxx.yyy ci-dessus).

La spécification du nom de domaine garantit explicitement que l’URL fournie par l’utilisateur ne comporte aucun moyen de flexion des caractères léger pour amener votre site à faire quelque chose pour lequel il n’est peut-être pas préparé, ou du moins à afficher le nom de domaine approprié. dans la barre d’adresse, quelle que soit la chaîne d’URL ouverte par la page.

Cela pourrait même aider à convertir des domaines encodés en punycode pour afficher les caractères unicode appropriés dans la barre d’adresse.

Ref: Apache redirige www vers non-www et HTTP vers HTTPS

http://exemple.com

http://www.example.com

https://www.example.com

à

https://example.com

 RewriteEngine On RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} ^www\. [NC] RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301] 

Si, au lieu de example.com, vous voulez que l’URL par défaut soit http://www.example.com , modifiez simplement les troisième et cinquième lignes:

 RewriteEngine On RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301] 

Cela a fonctionné pour moi:

 RewriteEngine On RewriteCond %{HTTPS} on RewriteCond %{HTTP_HOST} ^www\.(.*) RewriteRule ^(.*)$ https://%1/$1 [R=301,L] 
 RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.(.*) RewriteRule ^.*$ https://%1/$1 [R=301,L] RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 

Cela a fonctionné pour moi après beaucoup d’essais et d’erreurs. La première partie provient de l’utilisateur ci-dessus et capturera http://www.xxx.yyy et enverra à https: //xxx.yyy

La partie 2 examine l’URL saisie et vérifie si HTTPS, sinon, envoie à HTTPS

Fait dans cet ordre, il suit la logique et aucune erreur ne se produit.

ICI est ma version complète en side htaccess avec WordPress:

 RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.(.*) RewriteRule ^.*$ https://%1/$1 [R=301,L] RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L] # BEGIN WordPress  RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]  # END WordPress 

Pour moi, il était préférable de coder en dur “example.com” en tant que chaîne, donc j’ai besoin de moins de règles, même si vous pouvez l’utiliser pour redirect de .org vers .com ou similaire:

  RewriteEngine On RewriteCond %{HTTP_HOST} !^example\.com$ [NC] RewriteRule ^ https://example.com%{REQUEST_URI} [L,NE,R=301]