Omitir .htaccess / .htpasswd si se encuentra en una determinada dirección IP

¿Es posible tener una configuración de control de acceso .htaccess/.htpasswd para un directorio determinado, pero si son de una dirección IP específica, omitir la autenticación de inicio de sesión/contraseña?

Sé que puedes hacer algo como esto en el archivo .htaccess:

order deny,allow
deny from all
allow from 000.000.000.000

Pero si agrega algo a lo largo de estas líneas:

AuthType Basic
AuthName "restricted area"
AuthUserFile /path/to/.htpasswd
require valid-user

Luego pide la contraseña. ¿Hay alguna forma de hacer una configuración de tipo if/else, o alguna otra solución para que a los usuarios como una IP determinada (o conjunto de IP) no se les solicite una contraseña, pero todos los demás sí?

preguntado el 02 de mayo de 12 a las 19:05

¿Qué versión de apache estás ejecutando? -

¿Alguien tiene alguna solución para Apache 2.2.x? -

6 Respuestas

Para las versiones 2.2.X puede usar lo siguiente...

AuthUserFile /var/www/mysite/.htpasswd
AuthName "Please Log In"
AuthType Basic
require valid-user
Order allow,deny
Allow from xxx.xxx.xxx.xxx
satisfy any

Obviamente, reemplace la ruta a su archivo de usuario y la dirección IP que le gustaría omitir la autenticación.

Se puede encontrar una explicación más detallada de los detalles en: http://httpd.apache.org/docs/2.2/howto/auth.html

contestado el 14 de mayo de 12 a las 14:05

Casco de una respuesta, eso. ;) - LeonardChallis

Me salvas el día. - Hoang Hieu

Si usa Apache> = 2.4, sería algo como esto:

<If "%{REMOTE_ADDR} != '127.0.0.1'">
  AuthType Basic
  AuthName "restricted area"
  AuthUserFile /path/to/.htpasswd
  require valid-user
</If>

Para obtener más información, consulte el documentos.

Respondido el 22 de diciembre de 14 a las 15:12

Desafortunadamente, parece que el servidor ejecuta Apache 2.2.19 - Keefer

Funciona perfectamente para mí (Apache/2.4.10 (Debian)). Gracias ! - usuario4457363

También puede usar notación de red en lugar de direcciones literales: <If "%{REMOTE_ADDR} -ipmatch '192.168.1.0/24'"> - mivk

Estoy ejecutando Apache/2.2.16 (Debian) y tuve un problema similar, lo resolví así:

(Esto se puede ejecutar en un archivo .htaccess o directamente en el host virtual bajo <Location/>)

Order deny,allow
Deny from all
AuthType Basic
AuthUserFile /home/somesite/.htpasswd
AuthName "No entry, unless"
Require Valid-user
Allow from x.x.x.x
Allow from x.x.x.x
Satisfy Any

Permití ingreso sin contraseña desde dos ip diferentes, y el resto debe ingresar contraseña para ingresar.

Respondido 22 Jul 15, 08:07

Muchas gracias, estaba intentando esto dentro de un <Directory bloque, que no funciona, el <Location /> parte me ayudó mucho. - chmac

Compatible con apache 2.4:

AuthType Basic
AuthUserFile /www/.htpasswd
AuthName "Protected Area"

<RequireAny>
    Require ip 1.2.3.4
    Require valid-user
</RequireAny>

Ver la guía de migración Actualizando a 2.4 desde 2.2 para mas ejemplos

Respondido 14 ago 18, 09:08

Este funciona mejor para mí en apache 2.4.x y es un salvavidas, dado que tengo muchas IP para requerir (alrededor de 60 rangos de ip) o es una sintaxis mucho mejor que la de NicoMinsk con if/elseIf /demás - Eric

Si usa Apache> = 2.4 y desea permitir un conjunto de IP, como se le preguntó en la pregunta inicial, puede hacerlo así:

   <If "-R '192.168.0.0/24'">
            Require all granted
    </If>
    <ElseIf "-R '192.168.1.0/24'">
            Require all granted
    </ElseIf>
    <Else>
            AuthType Basic
            AuthName "restricted area"
            AuthUserFile /etc/apache2/.htpasswd
            require valid-user
    </Else>

Respondido el 25 de enero de 18 a las 15:01

Además de la respuesta de j5Dev:

# Interne IP-Adressen
SetEnvIf Remote_Addr "^127\.0\.0\.1$" IsIntern
SetEnvIf Remote_Addr "^192\.168" IsIntern
# .. add more IP addresses or ranges here

# Authentication, wenn nicht intern
AuthUserFile /path/to/.htpasswd
AuthName "restricted area"
AuthType Basic
require valid-user
Order allow,deny
Allow from env=IsIntern
satisfy any

respondido 12 mar '13, 13:03

Ninguna de las respuestas en esta página funciona para mí con la directiva "satisfacer cualquiera", que probablemente sea bastante importante :) ¿Hay algo más que deba configurarse? Estoy en Apache 2.2.22. - charlie schliesser

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.