web-dev-qa-db-fra.com

htaccess force https et redirige www vers non-www, mais pas d'autres sous-domaines

Je sais qu'il existe de nombreux threads similaires, mais aucun ne semble correspondre exactement à mon problème. Voici ce que j'essaie de faire:

(1) http://www.mydomain.com/ -> https://mydomain.com/
(2) http://mydomain.com/     -> https://mydomain.com/
(3) https://www.mydomain.com -> https://mydomain.com/

Idéalement, j'aimerais également couvrir la situation si j'ajoute un jour plus de sous-domaines, pour qu'ils se comportent automatiquement comme suit (de préférence d'une manière générique qui fonctionne pour tout sous-domaine que j'ajoute).

(4) http://sub.mydomain.com/ -> https://sub.mydomain.com/

À ce stade, je me demande s’il est même possible de créer un fichier .htaccess unique qui réponde à tous les besoins, même si j’avoue que je comprends les regex, mais je ne suis pas exactement un mod_rewrite uberpro.

Voici les solutions que j'ai déjà essayées:

Mon certificat SSL couvre le sous-domaine www. Par conséquent, je ne cherche pas de solution d'erreur de "connexion non approuvée", je sais que ce n'est pas possible.

17
sub_lunar

Mettez ce code dans votre fichier DOCUMENT_ROOT/.htaccess:

RewriteEngine On

RewriteCond %{HTTPS} off
RewriteCond %{ENV:HTTPS} off
RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301,NE]

RewriteCond %{HTTP_Host} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301,NE]
10
anubhava

J'ai trouvé que la plupart des suggestions n'étaient pas compréhensibles lorsque vous aviez quelque chose qui était https://www.example.com et qui redirigeait vers https://example.com .

Ce qui suit a fonctionné pour toutes les permutations:

RewriteEngine On

# match any URL with www and rewrite it to https without the www
RewriteCond %{HTTP_Host} ^(www\.)(.*) [NC]
RewriteRule (.*) https://%2%{REQUEST_URI} [L,R=301]

# match urls that are non https (without the www)
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_Host} !^(www\.)(.*) [NC]
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]

J'espère que cela aide quelqu'un!

22
RCheesley
RewriteEngine on


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

Ce script va rediriger 

à 

tout en préservant le sous-domaine.

2
starkeen

Forcer à l'aide de HTTPS

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI}

Pour forcer www à non www

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_Host} ^www.bewebdeveloper.com$
RewriteRule ^(.*) http://bewebdeveloper.com/$1  [QSA,L,R=301]
1
rachid

Aucun des exemples ne fonctionnait pour moi, ils semblaient juste rester coincés dans une boucle, les travaux suivants cependant.

    # match any URL with www and rewrite it to https without the www
    RewriteCond %{HTTP_Host} ^(www\.)(.*) [NC]
    RewriteRule (.*) https://%2%{REQUEST_URI} [R=301,L]

    # match non https and redirect to https
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule ^(.*)$ https://%{HTTP_Host}/$1 [R=301,L]

L'ordre importe, cela empêchera dans certains cas une 3ème redirection. 

Si vous souhaitez utiliser un sous-domaine (autre que www.), Supprimez simplement le premier jeu de règles.

Donc, pour les sous-domaines, tout ce dont vous avez besoin est 

    # match non https and redirect to https
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule ^(.*)$ https://%{HTTP_Host}/$1 [R=301,L]

J'utilise les services Cloudways et j'ai trouvé que c'était la seule chose qui fonctionne

0
Simon Ilett

J'ai trouvé que la réponse suivante correspondrait à votre besoin:

www à non-www avec https mais pas d'autre sous-domaines

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]

Remplir toutes les trois (3) conditions: 

(1) http://www.example.com/ -> https://example.com/
(2) http://example.com/     -> https://example.com/
(3) https://www.example.com -> https://example.com/

mais pas d'autre sous-domaines que www comme ceci:

(4) http://others.example.com -> https://others.example.com/
(5) https://others.example.com -> https://others.example.com/
0
Chetabahana