Foros del Web » Administración de Sistemas » Apache »

Aplicar reglas mod_rewrite dependiendo de si el usuario está autenticado o no

Estas en el tema de Aplicar reglas mod_rewrite dependiendo de si el usuario está autenticado o no en el foro de Apache en Foros del Web. Hola amigos. El tema es este. Soy la encargada del desarrollo y mantenimiento de un portal pequeño. Por motivos de desarrollo y para facilitar la ...
  #1 (permalink)  
Antiguo 04/06/2013, 23:06
 
Fecha de Ingreso: mayo-2006
Mensajes: 20
Antigüedad: 18 años, 6 meses
Puntos: 0
Pregunta Aplicar reglas mod_rewrite dependiendo de si el usuario está autenticado o no

Hola amigos.

El tema es este. Soy la encargada del desarrollo y mantenimiento de un portal pequeño. Por motivos de desarrollo y para facilitar la actualización y publicación de nuevas versiones, cada versión es alojada en un subdirectorio, y mediante .htaccess se dirige los requests hacia el directorio de la versión actual. Esto me facilita el actualizar/cambiar de versión, y tener una demo de las nuevas versiones antes de publicarlas.

El asunto es que el dueño de la página desea también poder ver los contenidos antes de su publicación, y por un tiempo hasta ahora lo que hacía era crear reglas específicas y ponerle como condición su ip (y obviamente la mía también), así ambos podríamos ver el sitio demo mientras que públicamente era la versión estable la publicada.

El problema es que su ip cambia constantemente, así que todo el tiempo me pide habilitar acceso a otra ip y debo hacer el cambio en el archivo .htaccess.

He pensado en manejar esto mediante autenticación HTTP, si el usuario X está autenticado en el servidor, hacer que los requests se dirijan a /sitio/version_2_0b por ejemplo, y si no, que lo hagan a /sitio/version_1_4. La idea central era, por ejemplo, teniendo el dominio http://www.sitio.com/, hacer que si cualquier usuario entraba a esa url o cualquier subpágina dentro de esa url, vea el sitio publicado, pero si el usuario entra por ejemplo a http://www.sitio.com/?preview2_0b pues se le solicite clave y contraseña (Que las tendría guardadas en un archivo .htpasswd), y si las introduce correctamente sus requests empiecen a ser apuntados hacia la versión demo.

Lo que tengo es esto:

Código Apache:
Ver original
  1. # Lo hago así porque de la forma tradicional SetEnvIf, no puedo tomar como condición el valor del Query String
  2. RewriteCond %{QUERY_STRING} preview2_0b
  3. # Si la url de acceso tiene ese query string, variable de entorno accederdemo
  4. RewriteRule (.*) - [E=accederdemo:1]
  5.  
  6. # Solicitar autenticación si se ha seteado la variable de entorno accederdemo
  7. AuthType Basic
  8. AuthName "Demo Preview"
  9. AuthUserFile "home/pass/.htpasswd"
  10. Require valid-user
  11. Order allow,deny
  12. Allow from all
  13. Deny from env=accederdemo
  14. Satisfy any
  15.  
  16. # Reglas de Mod_Rewrite
  17.  
  18. # Acceso BETA : Uso la variable %{REMOTE_USER} que debería contener el usuario autenticado
  19. RewriteCond %{REMOTE_USER} demo_user
  20. RewriteCond %{REQUEST_URI} !^/site/version_2_0b
  21. RewriteRule ^(.*)$ /site/version_2_0b/$1 [L]
  22.  
  23. # Acceso PUBLICO
  24. RewriteCond %{REQUEST_URI} !^/site/version_1_4
  25. RewriteRule ^(.*)$ /site/version_1_4/$1 [L]

No funciona. Accediendo a la url con el query string indicado, nunca se solicita el acceso con password y se ejecutan las segundas reglas (públicas).

Para probar, he intentado setear la variable con
Código:
SetEnvIf Host sitio\.com accederdemo
antes de la autenticación. En este caso, sí me solicita el usuario y contraseña al entrar a www.sitio.com, pero igual se ejecutan siempre las segundas reglas.

Gracias por adelantado.
  #2 (permalink)  
Antiguo 05/06/2013, 19:11
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: Aplicar reglas mod_rewrite dependiendo de si el usuario está autenticado o

Quizás no entiendo bien la idea, pero me parece que lo estás complicando.
Según entiendo tenés una versión "publica"

/
ó
/publica

y luego versiones de prueba

/prueba1
/prueba2
/prueba3

No sería más simple proteger prueba1, prueba2, prueba3 con .htaccess y que tanto vos como el dueño tengan su clave de acceso?

SAludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 05/06/2013, 19:34
 
Fecha de Ingreso: mayo-2006
Mensajes: 20
Antigüedad: 18 años, 6 meses
Puntos: 0
Respuesta: Aplicar reglas mod_rewrite dependiendo de si el usuario está autenticado o

Gracias emprear.

La versión pública está efectivamente en /publica, y la beta o prueba en /prueba. Pero necesito que el sitio sea visualizado siempre bajo el dominio principal www.sitio.com (sea la versión pública o el acceso beta), no por comodidad, sino por la forma en la que el sitio está programado. Todo esto lo lograba con rewriterules en un .htaccess, tomando como condición la ip del usuario beta para dirigir al sitio /prueba. Y funciona bien. Pero he leído y deseo tomar como condición en la sentencia RewriteCond no la ip, sino la variable %{REMOTE_USER}.

Ahora, La idea que tenía es solicitar acceso con usuario y password si el usuario entraba a http://www.sitio.com/?preview2_0b, detectando la presencia del string "preview2_0b" en el query_string. Para eso usé esa RewriteRule de las 2 primeras líneas de mi código previo, para setear esa variable de entorno "accederdemo". Si la variable está seteada, entonces que se le solicite usuario y password.

Y finalmente, si %{REMOTE_USER} es demo (el usuario que tengo en .htpasswd), entonces mediante la rewriterule correspondiente, el request tome los archivos de /prueba y no de /publico.

Espero se me haya entendido, gracias.

Etiquetas: autenticación, demo, htaccess, preview
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:08.