web-dev-qa-db-fra.com

Comment empêcher une règle de réécriture de s'exécuter pour un seul sous-domaine?

Au niveau racine .htaccess, j'ai ajouté une condition pour réécrire les requêtes HTTP en tant que HTTPS:

RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI}

Ceci s'applique au domaine principal et à tous les sous-domaines. Malheureusement, il reste encore du travail à faire dans l’un des sous-domaines pour que cela fonctionne avec HTTPS. Je voudrais donc insérer quelque chose dans celui-ci . Fichier htaccess pour annuler les règles de réécriture héritées.

Le fichier doit toujours hériter de nombreuses autres configurations du domaine parent. Il ne doit donc annuler que cette règle de réécriture.

Comment puis-je désactiver cette règle de réécriture pour un sous-domaine particulier?

1
Itai

Si le sous-domaine pointe vers un sous-répertoire situé à la racine du document du domaine principal, vous pouvez simplement inclure une directive RewriteEngine On dans le fichier .htaccess de ce sous-répertoire. Cependant, cela remplacera tout les directives mod_rewrite dans le fichier parent .htaccess, ce qui peut ne pas être souhaitable (bien que "toute autre configuration du domaine parent" sera hérité).

Si vous souhaitez exécuter d'autres directives mod_rewrite dans le parent .htaccess, vous devez ajouter une condition à cette règle HTTP à HTTPS dans le fichier parent .htaccess qui exclut spécifiquement le sous-domaine.

Par exemple:

RewriteEngine On
RewriteCond %{HTTP_Host} !^subdomain\.
RewriteCond %{HTTPS} !on
RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [R=302,L]

Ce qui dit ... si le hôte fait pas démarre subdomain. et est pas https alors ...

Vous avez normalement besoin de l'indicateur L sur les redirections pour que le traitement ne continue pas dans le fichier (si vous avez plusieurs directives mod_rewrite). De plus, cet achat doit normalement être une redirection 301 (permanente). Si tel est le cas, changez le 302 en 301 lorsque vous êtes sûr que tout fonctionne correctement. Il est peut-être préférable de laisser un 302 en cours de développement.

En outre, il n'est pas nécessaire de capturer le chemin URL (c'est-à-dire (.*)) s'il n'est pas utilisé dans les directives RewriteRulesubstitution (ou RewriteCond).

1
MrWhite