Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/06/2013, 23:06
^^Naty^^
 
Fecha de Ingreso: mayo-2006
Mensajes: 20
Antigüedad: 17 años, 11 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.