web-dev-qa-db-fra.com

Comment forcer ssl et www pour un sous-domaine en tant que domaine indépendant?

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?

4
Pasakgroup

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.

3
Pasakgroup

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?

3
MrWhite