11
votes

.Htaccess Basic auth de l'hôte virtuel?

Je me demandais s'il était possible de configurer une exigence d'authentification de base HTTP conditionnelle basée sur l'URL d'hôte virtuelle dans un fichier .htaccess.

Par exemple, ce que je veux faire, c'est avoir mysite.com et test.mysite.com Exécutez la même base de code dans le même répertoire mais mot de passe Protect Test.mysite.com. Il serait configuré de cette façon afin que je n'aurais pas besoin de brancher mon code puisque mon code d'application puisse voir quel Vhost / URL est servi et choisissez la base de données pour servir le contenu de.


0 commentaires

3 Réponses :


20
votes

Vous pouvez trier de KLUDGE Ceci en utilisant mod_setenvif avec les modules mod_auth . Utilisez la directive setenvifnocase pour définir quel hôte est protégé par un mot de passe. Vous aurez besoin de quelques directives supplémentaires pour satisfaire l'accès: xxx

puis dans le répertoire bloc (ou juste en mode ouvert), vous avez la configuration de votre authentification , quelque chose comme ceci: xxx

maintenant pour la requête / satisfaire des trucs: xxx

Ceci va le faire pour tout hôte Cela ne correspond pas à ^ test \ .mysite \ .com \. (: 80)? $ aura accès sans besoin d'auth ( autorisera env =! protégé_host ) Mais sinon, nous avons besoin d'un utilisateur valide ( nécessite un utilisateur valide ). Le satisfaire tout garantit que nous avons juste besoin d'un des 2, que ce soit, soit l'autorisation ou le besoin.


4 commentaires

J'essaie d'avoir un cas conditionnel activé, mais utilisez pour le tester, mais cela ne fonctionne pas. Des idées? .. J'utilise: setenvifnocase hôte "dev.example.com" dev ... puis pour le cas "dev" et pour le "régulier ' placer...


@ DM8 Ce n'est pas ce que fait . Ces variables sont définies par le drapeau de la ligne . Ce ne sont pas des variables d'environnement.


Hmm, puis à part attendre que mon hôte soit mis à niveau vers Apache 2.4 (qui a le block ...). Y a-t-il un moyen d'obtenir le comportement que j'espérais? ... dans mes recherches, j'ai trouvé l'article suivant, qui semble indiquer qu'il y a non moyen de le faire dans apache 2.2x: Turboflash.WordPress.com/2010/05/27/...


@ DM8 Néanmoins que je sache, jusqu'à la création d'un bloc qui est appliqué à une variable d'environnement



5
votes

Voici une solution similaire à ce que Jon Lin proposé, mais en utilisant rewriteCond pour vérifier le nom d'hôte: xxx


0 commentaires

12
votes

J'ai eu des problèmes d'implémentation de la solution de Jon: Bien que je connaisse assez bien avec Apache Conf et expressions régulières, l'authentification a toujours été tirée. À partir d'une analyse rapide, il semblait que le autorisez de env =! Protégé_host la ligne n'a pas lancé.

Mais j'ai trouvé une autre solution qui me semble plus sûre pour moi:

i créé deux hôtes virtuels pour les deux domaines pointant vers la même racine de documents (qui est entièrement autorisé par la voie). Dans l'un des vhosts, j'ai ajouté les directives pour l'authentification de base (directement dans le bloc de directive Vhost).

fonctionne comme un charme. Et j'ai un meilleur sentiment que cela est vraiment sûr - aucun risque de négliger des détails dans le modèle de regex qui ouvrirait les portes pour les intrus. xxx


1 commentaires

C'est le moyen droit de le faire. Si vous avez besoin de 2 Vhosts à configurer différemment, vous configurez 2 Vhosts. La solution hacky avec l'env VaR et satisfaire tout ne doit vraiment être appliquée que si votre hébergement ne vous donne pas accès à Vhost / Server Config et que vous restiez à une solution .htaccess.