Question

J'ai un site qui sert certains contenus en fonction du sous-domaine. C'est donc le même ensemble de fichiers, et peut-être que l'en-tête et certaines informations dans les pages du site changent en fonction du sous-domaine.

Je dois également disposer d'une authentification différente par mot de passe ht basée sur le sous-domaine, mais je ne trouve pas d'informations sur la procédure à suivre pour effectuer un type if / then dans htaccess.

Fondamentalement, ce dont j'ai besoin, c'est ceci:

if subdomain = 'abc' utiliser ce fichier htpassword

si subdomain = 'def' utiliser ce fichier htpassword

Cela peut-il être fait?

Était-ce utile?

La solution

Essayez quelque chose comme ça:

SetEnvIf Host ^abc\. HOST_ABC
SetEnvIf Host ^dev\. HOST_DEF

<IfDefine HOST_ABC>
    AuthUserFile …
</IfDefine>
<IfDefine HOST_DEF>
    AuthUserFile …
</IfDefine>

Autres conseils

quel serveur Web utilisez-vous?

Une technique qui peut fonctionner sur plusieurs serveurs différents (cela fonctionne certainement dans apache) consiste à avoir un fichier .htaccess différent dans le répertoire correspondant à chaque sous-domaine.

Si c'était moi (et je n'avais pas pensé à le faire auparavant), je le ferais:

  1. Utilisez une redirection interne utilisant mod_rewrite vers différentes racines de site (/ suba ou / subb) en fonction de certains facteurs (émulation de IF / ELSE)
  2. Utilisez les liens symboliques dans le répertoire public, mais pas le fichier .htaccess
  3. .

alors:

/sites/subdomain_a/.htaccess
/sites/subdomain_a/pub
/sites/subdomain_b/.htaccess
/sites/subdomain_b/pub

/sites/subdomain_a/pub == /sites/subdomain_b/pub

en utilisant

ln -s

ou similaire. Ensuite, utilisez mod_rewrite pour rediriger (en interne) vers la bonne racine du site. Je pense que mod_rewrite est exécuté avant le chargement de .htaccess.

Cela signifie que vous servez effectivement les mêmes fichiers de site avec un .htaccess différent selon le sous-domaine.

J'espère que cela vous aidera, un peu de bidouille.

Je serais intéressé de voir si quelque chose de mieux existe.

Vous ne pouvez pas utiliser if / else car htaccess n'est pas une liste d'instructions. Mais si vous utilisez un bloc conditionnel comme & Lt; IfModule mod_rewrite.c & Gt; ou < Si vous définissez quelque chose > ;, vous pouvez utiliser différentes directives en fonction du sous-domaine demandé. Je ne suis pas sûr de celui que vous utiliseriez si ...

Vous pouvez également placer un fichier .htaccess un niveau au-dessus des fichiers et utiliser < Répertoire quelque chose > pour spécifier des règles différentes pour chaque sous-domaine, mais que les répertoires de sous-domaines soient tous des liens symboliques menant au même répertoire contenant les fichiers partagés.

donc ce serait le répertoire au-dessus de la (des) racine (s) Web:
.htaccess
sitesfiles
subdomain1 (lien symbolique vers sitefiles)
subdomain2 (lien symbolique vers sitefiles)
...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top