1) Une demande à http://www.example.net
fera deux redirections.
Cela peut être résolu en inversant simplement les deux règles. Ensuite, www.example.net
est redirigé vers HTTPS dans la première redirection, donc la redirection de HTTP vers HTTPS n'a pas besoin d'être déclenchée.
(Cela suppose cependant que vous n'avez pas l'intention de mettre en œuvre HSTS - auquel cas vous devriez les garder comme deux redirections puisqu'une redirection vers HTTPS sur le même nom d'hôte en premier est une exigence.)
2) Comme la plupart des exemples de redirection de www vers non-www sur ce site, cela ne redirigera pas ww.
ou wwww.
donc mes analyses contiennent beaucoup de sous-domaines mal orthographiés qui n'ont pas été redirigés.
En règle générale, les demandes vers les sous-domaines ww.
ou wwww.
ne se résoudront tout simplement pas, donc ce n'est généralement pas un problème. Pour que cela fonctionne, vous devez avoir configuré un sous-domaine générique dans DNS et configuré le serveur pour accepter de telles demandes.
Mais cela peut être pris en compte en modifiant l'expression régulière (extrait) de ^www\.
à ^w{2,4}\.
.
3) Je voudrais exclure le sous-domaine dev.
de la redirection, donc http://dev.example.net
et son homologue https
, car j'utilise dev.
pour le développement et la mise en production.
Cela s'applique uniquement à la règle de HTTP vers HTTPS, donc une condition supplémentaire peut être appliquée ici pour exclure les noms d'hôtes qui commencent par dev.
.
En regroupant les points ci-dessus, essayez ce qui suit :
# Supprimer les préfixes ww, www ou wwww (et rediriger vers HTTPS)
RewriteCond %{HTTP_HOST} ^w{2,4}\.example\.net [NC]
RewriteRule (.*) https://example.net/$1 [R=301,L]
# Passer de http à https (sauf le sous-domaine dev)
RewriteCond %{HTTP:Host} !^dev\. [NC]
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP:Host}%{REQUEST_URI} [R=301,L]
J'ai gardé votre utilisation de HTTP:Host
identique (pour accéder à l'en-tête de requête HTTP Host
) au cas où c'est une exigence du répartiteur de charge ? Sinon, il est plus courant d'utiliser la variable de serveur HTTP_HOST
ici.
Le préfixe !
sur le CondPattern (c'est-à-dire !^dev\.
) négative l'expression régulière, donc la condition est réussie lorsque le Host
ne commence pas par dev.
. (Je suppose que www.dev.
n'est pas une chose ?)
(.*)
est la même chose que ^(.*)$
puisque l'expression régulière est gourmande par défaut.
Vous devrez vider le cache de votre navigateur avant de tester. Il est conseillé de d'abord tester avec des redirections temporaires 302 pour éviter tout problème de mise en cache.