Je possède le example.tld
.
Je veux forcer SSL et https pour root-domain
et tous ses subdomains
.
J'ai utilisé le code ci-dessous dans le fichier .htaccess
du domaine racine:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_Host} !^www\.example\.tld$ [NC]
RewriteRule ^(.*)$ https://www.example.tld/$1 [L,R=301]
Cela semble fonctionner parfaitement pour le domaine racine.
Mais, pour des sous-domaines tels que blog.example.tld
, j’ai utilisé différentes suggestions, telles que:
RewriteCond %{HTTP_Host} ^blog\.example.\tld$ [NC]
RewriteRule ^ https://www.%{HTTP_Host}%{REQUEST_URI} [R=301,L,NE]
Mais aucun d’entre eux ne fonctionne correctement et ils redirigeront vers la version ssl www de root-domain
au lieu de la version ssl www de subdomain
.
Que devrais-je faire?
Enfin, j'ai trouvé le problème.
Problème causé par les paramètres de l'hôte.
En raison de certains problèmes, j'ai dû définir un sous-domaine en tant que independent domain
dans l'hôte. Cela a posé des problèmes avec Redirects
. Parce que, au lieu de sous-domaine, le domaine principal répondait à Redirection commands
.
Pour résoudre ce problème, j'ai transféré le sous-domaine vers un autre hôte. Ainsi, Redirection commands
pour le sous-domaine a été répondu à partir du nouvel hôte contenant le sous-domaine.
Dans cette nouvelle situation, le simple commandement suivant force ssl and www for subdomain
:
RewriteEngine On
RewriteCond %{HTTP_Host} !^www\.sub.example\.tld$ [NC]
RewriteRule ^ https://www.%{HTTP_Host}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
J'espère que cette expérience sera utile pour les autres.
Mais aucun d’entre eux ne fonctionne correctement et ils redirigeront vers la version ssl www de root-domain au lieu de la version ssl www du sous-domaine.
(Je suppose que tous vos sous-domaines sont mappés sur la même zone du système de fichiers.)
On dirait que vous avez peut-être placé les directives dans le mauvais ordre. Si vous avez placé la redirection de sous-domaine après la redirection de domaine racine, elle ne sera jamais traitée et la redirection de domaine racine interceptera toutes les demandes de sous-domaine et sera redirigée. le sous-domaine revient à la racine, puisque la directive RewriteCond
vérifie si le domaine demandé est non www.example.tld
- this correspondra également au sous-domaine.
Toutefois, si vous souhaitez toujours appliquer le sous-domaine www (même pour vos sous-domaines ), vous pouvez "simplifier" vos directives en une seule règle. . Par exemple:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_Host} !^www\.
RewriteCond %{HTTP_Host} ^(?:www\.)?(.+)\.?$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]
Cela correspond à toute requête HTTP ou qui ne démarre pas www.
et redirige vers HTTPS, en préfixant le sous-domaine www
(si nécessaire). La 3ème directive RewriteCond
est nécessaire pour capturer le nom d'hôte demandé, moins tout préfixe www.
(le cas échéant). Le %1
dans la substitution est une référence arrière au nom d'hôte, moins tout préfixe www.
.
Cela affecte naturellement tous les domaines du compte (si vous en avez plusieurs).
PDATE: Je viens de voir votre réponse, donc je ne suis pas sûr que ce soit pertinent ou non?