Pregunta

Me preguntaba si era posible la instalación de un condicional http basic auth requisito basado en el host virtual URL en una .archivo htaccess.

Por ejemplo, lo que quiero hacer es tener mysite.com y test.mysite.com ejecutar fuera de la misma base de código en el mismo directorio pero proteger con contraseña test.mysite.com.Sería la instalación de esta manera, por lo que no necesitaría de la rama de mi código ya que mi código de la aplicación puede ver que vhost/url es ser atendidas desde y elegir la base de datos para ofrecer contenido de.

¿Fue útil?

Solución

Usted puede ordenar de parche esta utilizando mod_setenvif junto con el mod_auth los módulos.El uso de la SetEnvIfNoCase directiva para establecer el host que está protegido con contraseña.Usted necesitará un par de extra directivas para satisfacer acceso:

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

A continuación, dentro de la Directory bloque (o sólo en abierto) tiene su auth cosas de instalación, algo como esto:

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

Ahora para requerir/satisfacer cosas:

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

Esto hará que cualquier host que no coincide ^test\.mysite\.com\.?(:80)?$ tendrá acceso, sin necesidad de auth (Allow from env=!PROTECTED_HOST) pero de lo contrario, necesitamos un usuario válido (Require valid-user).El Satisfy any se asegura de que sólo tenemos uno de los 2, el Permitir o Exigir.

Otros consejos

Tuve problemas para implementar la solución de Jon: Aunque estoy bastante familiarizado con Apache conf y las expresiones regulares, la autenticación siempre se activa.A partir de un análisis rápido, parecía que la línea Allow from env=!PROTECTED_HOST no se activó.

Pero encontré otra solución que en realidad me parece más segura:

Creé dos hosts virtuales para los dos dominios que apuntan a la misma raíz del documento (que por cierto está totalmente permitido).En uno de los vhosts agregué las directivas para la autenticación básica (directamente en el bloque de directivas vhost).

Funciona de maravilla.Y tengo una mejor sensación de que esto es realmente seguro: no hay riesgo de pasar por alto ningún detalle en el patrón de expresiones regulares que abriría las puertas a los intrusos.

<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>

Aquí hay una solución similar a la que propuso Jon Lin, pero usando RewriteCond para verificar el nombre del host:

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top