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>