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# Lo hago así porque de la forma tradicional SetEnvIf, no puedo tomar como condición el valor del Query String
RewriteCond %{QUERY_STRING} preview2_0b
# Si la url de acceso tiene ese query string, variable de entorno accederdemo
RewriteRule (.*) - [E=accederdemo:1]
# Solicitar autenticación si se ha seteado la variable de entorno accederdemo
AuthType Basic
AuthName "Demo Preview"
AuthUserFile "home/pass/.htpasswd"
Require valid-user
Order allow,deny
Allow from all
Deny from env=accederdemo
Satisfy any
# Reglas de Mod_Rewrite
# Acceso BETA : Uso la variable %{REMOTE_USER} que debería contener el usuario autenticado
RewriteCond %{REMOTE_USER} demo_user
RewriteCond %{REQUEST_URI} !^/site/version_2_0b
RewriteRule ^(.*)$ /site/version_2_0b/$1 [L]
# Acceso PUBLICO
RewriteCond %{REQUEST_URI} !^/site/version_1_4
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.