Question

Je me demandais s'il était possible de configurer une condition http exigence auth de base en fonction de l'URL de l'hôte virtuel dans un fichier .htaccess.

Par exemple ce que je veux faire est d'avoir mysite.com et test.mysite.com ruisseler la même base de code dans le même répertoire, mais le mot de passe de protection test.mysite.com. Ce serait la configuration de cette façon pour que je aurais pas besoin de branche mon code depuis mon code de l'application peut voir que vhost / url c'est d'être servi de la base de données et choisissez de servir le contenu de.

Était-ce utile?

La solution

Vous pouvez trier de bidouille cela en utilisant mod_setenvif ainsi que les modules de mod_auth. Utilisez la directive SetEnvIfNoCase définir quel hôte est protégé par mot. Vous aurez besoin d'un ou deux directives supplémentaires pour satisfaire l'accès:

# Check for the hostname here
SetEnvIfNoCase HOST ^test\.mysite\.com\.?(:80)?$ PROTECTED_HOST

Ensuite, à l'intérieur du bloc Directory (ou tout simplement à l'air libre), vous avez la configuration de votre stuff auth, quelque chose comme ceci:

AuthUserFile /var/www/test.mysite.com/htpasswd
AuthType Basic
AuthName "Password Protected"

pour le besoin / substance satisfont:

Order Deny,Allow
Satisfy any
Deny from all
Require valid-user
Allow from env=!PROTECTED_HOST

Il sera donc un hôte qui ne correspond pas à ^test\.mysite\.com\.?(:80)?$ aura accès sans besoin d'auth (Allow from env=!PROTECTED_HOST) mais sinon, nous avons besoin d'un utilisateur valide (Require valid-user). Les Satisfy any assure que nous avons juste besoin l'un des deux, soit l'option Autoriser ou Exigent.

Autres conseils

J'ai eu des problèmes de mise en œuvre de la solution de Jon: Même si je suis assez familier avec Apache et des expressions régulières conf, l'authentification toujours tiré. À partir d'une analyse rapide, il ressemblait à la ligne Allow from env=!PROTECTED_HOST n'a pas botter.

Mais je l'ai trouvé une autre solution qui semble effectivement plus sûr de moi:

Je créé deux hôtes virtuels pour les deux domaines pointant vers la même racine du document (qui est entièrement permis par la voie). Dans l'un des vhosts j'ai ajouté les directives pour auth de base (directement dans le bloc de directive vhost).

fonctionne comme un charme. Et j'ai un meilleur sentiment que c'est vraiment sûr -. Aucun risque de négliger les détails du motif regex qui ouvrirait les portes des intrus

<VirtualHost *:80>
    ServerName www.mysite.com
    DocumentRoot "/path/to/common/doc/root"

    <Directory "/path/to/common/doc/root">
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName protected.mysite.com
    DocumentRoot "/path/to/common/doc/root"

    <Directory "/path/to/common/doc/root">
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all

        AuthUserFile /path/to/htpasswd
        AuthName "Password please"
        AuthType Basic
        Require valid-user
    </Directory>
</VirtualHost>

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

RewriteEngine On
RewriteCond %{HTTP_HOST} =protected.hostname.com
RewriteRule ^.*$ - [E=DENY:1]

AuthUserFile /path/to/htpasswd
AuthName "Password please"
AuthType Basic

Order Deny,Allow
Satisfy any
Deny from all
Require valid-user
Allow from env=!DENY
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top