7
votes

Puis-je faire un si / alors / sinon dans HTACCESS?

J'ai un site qui sert un certain contenu basé sur le sous-domaine. Donc, c'est le même ensemble de fichiers, et peut-être l'en-tête et certaines informations dans les pages de site modifient basées sur le sous-domaine.

Je dois également avoir une authentification HTPassword différente basée sur le sous-domaine, mais je ne trouve pas d'informations sur la manière de faire un type si / puis de la chose dans HTACCESS.

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

si sous-domaine = 'abc' Utilisez ce fichier hTPassword

si sous-domaine = 'def' Utilisez ce fichier hTPassword

peut-il être fait?


0 commentaires

5 Réponses :


0
votes

Quel WebServer utilisez-vous?

Une technique pouvant 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.


2 commentaires

Selon la question postée, c'est le même ensemble de fichiers, il n'y a donc pas de répertoires distincts.


C'est un serveur Win 2003 utilisant IIS avec Iispassword et Isapirewrite3. Votre solution ne fonctionnera pas car il n'y a pas de jeu de fichiers physiquement différent dans le système de fichiers pour les sous-domaines - tous les sous-domaines indiquent le même ensemble de fichiers et le PHP évalue le sous-domaine et affiche des données différentes en fonction de cela. Merci..



0
votes

Si c'était moi (et je n'ai pas pensé faire cela auparavant) je voudrais:

  1. Utilisez une redirection interne en utilisant mod_rewrite à différentes racines de site (/ SUBA ou / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / SUBB) en fonction de certains facteurs (émulation si / sinon)
  2. Utilisez liens symboliques sur le répertoire public, mais pas le .htaccess

    donc: xxx

    xxx

    utilisant xxx < / Pré>

    ou similaire. Ensuite, utilisez mod_rewrite pour rediriger (en interne) sur la racine du site de droite. Je pense mod_rewrite est exécuté avant que .HTtaccess est chargé.

    Cela signifie que vous servez efficacement les mêmes fichiers de site avec une autre .htaccess en fonction du sous-domaine. < p> J'espère que cela aide, un peu de hack.

    serait intéressé à voir si quelque chose de mieux existe.


0 commentaires

0
votes

Vous ne pouvez pas utiliser si / else car hAccess n'est pas une liste d'instructions. Mais si vous utilisez un bloc conditionnel comme ou , vous pouvez utiliser différentes directives sur la base du sous-domaine à la demande. Je ne suis pas sûr que vous utiliseriez si ...

Vous pouvez également mettre un fichier .htaccess un niveau supérieur au-dessus des fichiers et utiliser pour spécifier différentes règles pour chaque sous-domaine, mais rendre les répertoires sous-domaines être tous symboliques dans le même répertoire avec les fichiers partagés.

Ce serait donc le répertoire au-dessus de la (s) racine (s) Web:
.htaccess
SitesFiles

Sous-domaine1 (Symlink à SiteFiles)
Sous-domaine2 (Symlink à SiteFiles)
...


0 commentaires

4
votes

Essayez quelque chose comme ceci:

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

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


2 commentaires

Cela semble super - j'ai fini par avoir à construire une simple authentification à PHP en raison de contraintes de temps, mais je voudrais essayer cela dans un environnement de test car il semble avoir un sens. Merci!


Aussi charmant que cela a l'air, cela n'a pas fonctionné pour moi. Voulez-vous réviser ce gumbo?



0
votes

Vous pouvez utiliser pseudo d'autre avec une marque d'exclamation. Voir la deuxième directive dans l'exemple ci-dessous Memcache code> VS ! MEMCACHE CODE>:

<IfDefine MemCache>
   LoadModule mem_cache_module   modules/mod_mem_cache.so
</IfDefine>
<IfDefine !MemCache>
   LoadModule cache_disk_module   modules/mod_cache_disk.so
</IfDefine>


0 commentaires