crear configurar apache .htaccess basic-authentication .htpasswd

apache - configurar - .htaccess autenticación básica por el host virtual?



virtual host apache windows (3)

Aquí hay una solución similar a la propuesta por Jon Lin, pero usando RewriteCond para verificar el nombre de 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

Me preguntaba si era posible configurar un requisito de autenticación HTTP básica condicional basado en la URL del host virtual en un archivo .htaccess.

Por ejemplo, lo que quiero hacer es que mysite.com y test.mysite.com ejecuten la misma base de código en el mismo directorio, pero protejan con contraseña test.mysite.com. Se configuraría de esta manera para que no tuviera que bifurcar mi código, ya que mi código de aplicación puede ver a qué vhost / url se está enviando y elegir la base de datos para publicar el contenido.


Puede ordenar esto usando mod_setenvif junto con los módulos mod_auth . Use la directiva SetEnvIfNoCase para establecer qué host está protegido por contraseña. Necesitará un par de directivas adicionales para satisfacer el acceso:

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

Luego dentro del bloque de Directory (o simplemente al aire libre) tienes tu configuración de cosas de autenticación, algo como esto:

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

Ahora para las cosas de requerir / satisfacer:

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

Esto lo hará para que cualquier host que no concuerde ^test/.mysite/.com/.?(:80)?$ 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 asegura que solo necesitamos uno de los 2, ya sea Permitir o Requerir.


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 entraba en acción.

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

Creé dos hosts virtuales para los dos dominios que apuntan a la misma raíz del documento (que está totalmente permitido por cierto). En uno de los fantasmas, agregué las directivas para 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, sin 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>