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

Excluir directorio o archivo de la proteccion de mod_auth

Estas en el tema de Excluir directorio o archivo de la proteccion de mod_auth en el foro de Apache en Foros del Web. Hola a todos Tengo un sitio protegido con mod_auth. Este es el código de mi .htaccess que esta en el raiz del dominio (carpeta www) ...
  #1 (permalink)  
Antiguo 12/10/2011, 09:28
PanuWeb
Invitado
 
Mensajes: n/a
Puntos:
Pregunta Excluir directorio o archivo de la proteccion de mod_auth

Hola a todos

Tengo un sitio protegido con mod_auth. Este es el código de mi .htaccess que esta en el raiz del dominio (carpeta www)

Código:
AuthName "Mi Sitio"
AuthUserFile /home/sitech/.htpasswds/.htpasswd
AuthType basic
Require valid-user
La pregunta ¿Puedo hacer que un archivo o directorio específico, sea excluido de esta regla? osea que todo el sitio menos una carpeta o archivo específico. Tampoco quiero andar especificando carpeta por carpeta cual quiero proteger

Otra ¿Hay alguna forma de que a los usuarios que entran con su pass no se le aplique un RewriteRule que tengo?

Gracias
  #2 (permalink)  
Antiguo 12/10/2011, 14:16
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Excluir directorio o archivo de la proteccion de mod_auth

Esta respuesta es a medias, porque funciona solo editando httpd.conf, no trabaja sobre .htaccess, te la dejo por las dudas.
Si tu directorio se llama publico (al que queres acceder sin autorización)
a esto

Código Apache:
Ver original
  1. Options +Indexes +FollowSymLinks Includes
  2.         AuthType Basic
  3.         AuthName "Privado"
  4.         AuthUserFile /home/datos/.usuarios
  5.         require valid-user
  6.         AllowOverride All


agregale

Código Apache:
Ver original
  1. <Location "/publico">
  2.         Satisfy Any
  3. </Location>

Nunca se me planteó hacer eso, voy a ver si existe una solución más global


Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 12/10/2011, 17:00
PanuWeb
Invitado
 
Mensajes: n/a
Puntos:
De acuerdo Respuesta: Excluir directorio o archivo de la proteccion de mod_auth

Ok muchas gracias, seguro que me servira para otro caso.

Por otro lado quizas me este planteando mal la solucion a mi problema. Lo explico por si a alguien se le ocurre algo.

El tema es que estoy diseñando un sitio nuevo, junto con otras personas. Uso mod_auth desde el .htaccess para que se logueen, y así no depender de php por ejemplo.

Ahora que pasa personalizé los errores de apache pero si no estas logueado no te los muestra. Todos los errores estan en la carpeta errores por eso quiero expluir esa carpeta. Y atambien quiero excluir el index.html para que los visitantes sepan que estamos trabajando con el dominio.

De momento se me ocurre cambiar la estructura de directorios y dejarla así

Código:
/errores
   400.htm
   401.htm
   etc
/sitio
  .htaccess   //donde esta configurado el mod_auth
  otros archivos de mi sitio
/index.htm
Así sólo me queda protegida la carpeta sitio, pero eso me puede implicar problemas en la ruta de los enlaces, por eso queria evitarlo. Si a alguien se le ocurre una idea...

Saludos
  #4 (permalink)  
Antiguo 12/10/2011, 17:15
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Excluir directorio o archivo de la proteccion de mod_auth

creo que la lógica que estás usando no es la correcta, yo imaginaba que querias desproteger otra area de tu sitio.

Como la primer medida es que se logueen tu
errordocument 401 /401.html
debés de ponerlo en la raíz, el resto, donde quieras,
cualquier acceso a tu web, incluso si llaman un archivo inexistente va a provocar un 401, no un 404, y si quieren ingresar a una carpeta con -indexes, tampoco les va a generar un 403, sino un 401, recién cuando superen el logueo los otros errordocument van a ser funcionales
Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #5 (permalink)  
Antiguo 12/10/2011, 21:22
PanuWeb
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Excluir directorio o archivo de la proteccion de mod_auth

Si eso!! es así, pero no me muestra el mensaje 401 personalizado me poner el que esta por defecto en el servidor. Pero cuando me logueo todos los demás sí son los personalizados el 404, 500 y 503. Pensé que era porque los errores personalizados también estaban protegidos. Alguna idea??
  #6 (permalink)  
Antiguo 12/10/2011, 22:44
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Excluir directorio o archivo de la proteccion de mod_auth

Mirá yo lo tengo así y me funciona

Código Apache:
Ver original
  1. ErrorDocument 401 /401.shtml
lo teng oen la raiz del sitio, para ver si es un problema de que no encuentra el archivo
intenta de pasarle un mensaje en lugar de un documento

Código Apache:
Ver original
  1. ErrorDocument 401 "no se puede acceder"

Otra cosa que recuerdo es los errorDocument no funcionan en IE si el archivo tiene menos de un tamaño determinado (creo que 512bytes), el IE te muestra sus propios errores de error (ni siquiera los default de Apache), yo si son cortitos le agregi un comentario <!-- xxxxxxxxxxxxx --> hasta que tenga por lo menos 1kb.

Si asi aun no te funciona, puede que el servidor te ponga alguna limitación, pero es lo menos probable, en el server tendrias que tener algo como en tu virtualHost

Código Apache:
Ver original
  1. <Directory /web/docs>
  2.  ErrorDocument 401 default
  3.  </Directory>

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #7 (permalink)  
Antiguo 13/10/2011, 08:27
PanuWeb
Invitado
 
Mensajes: n/a
Puntos:
Pregunta Respuesta: Excluir directorio o archivo de la proteccion de mod_auth

Hola de nuevo!!!

Si eso soluciono el problema, moví todos los errores al raiz y funcionan perfectamente. Buscando encontré esta pagina donde sugieren una solución al problema pero parece no funcionar.

http://www.phpbuilder.com/board/show...php?t=10369501

Por otro lado, pegunto ¿se puede usar un script php para personalizar los emensajes de error? Osea, se que se puede porque ya loe probado, pero ¿no afecta a la función en sí del mensaje de error?

Gracias de nuevo
  #8 (permalink)  
Antiguo 13/10/2011, 10:31
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Excluir directorio o archivo de la proteccion de mod_auth

Podés crear un unico documento en php ó shtml, que maneje todos tus mensajes de error.
la variable que te va a permitir elaborar una respuesta es
$_SERVER['REDIRECT_STATUS'];

y la otra es $_SERVER['REQUEST_URI'] para saber que documento de solicito

fijate

Código PHP:
Ver original
  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml" lang="es-ar">
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>XHtml5</title>
  6. <meta name="author" content="Guillermo Gianello" lang="es" />
  7. </head>
  8. <body>
  9.  
  10. <?php
  11. $status = $_SERVER['REDIRECT_STATUS'];
  12. $codigos = array(
  13.         403 => array('403 Prohibido', 'Está prohibido el acceso a este recurso.'),
  14.         401 => array('401 No autorizado', 'Necesita de credenciales válidas para acceder a este recurso.'),
  15.         404 => array('404 No encontrado', 'El documento o recurso solicitado no se encuentra disponible.'),
  16.         405 => array('405 Método no permitido', 'Método no permitido.'),
  17.         408 => array('408 Tiempo de espera agotado', 'Su navegador ha superado el tiempo de espera permitido por el servidor.'),
  18.         500 => array('500 Error Interno del Servidor', 'Se ha pruducido un error interno en el servidor.')
  19.         );
  20.          
  21. $titulo = $codigos[$status][0];
  22. $mensaje = $codigos[$status][1];
  23. if ($titulo == false || strlen($status) != 3) {
  24.     $mensaje= 'Código incorrecto.';
  25. }
  26.  
  27. echo '<h1>' . $titulo . '</h1>' .  
  28.      '<p>' . $mensaje . '</p>';  
  29. echo "<p>Recurso solicitado: " . $_SERVER['REQUEST_URI'] . "</p>";
  30.  
  31. ?>
  32.  
  33. </body>
  34. </html>

Bueno, ese sólo es un modelo sencillo. en realidad podés poner lo que quieras(crear logs, mandarlos a una base de datos, agregar más números de códigos, capturar más variables, etc), incluso personalizarla para que quede igual a tu página de inicio.
Cuidado con lo siguiente, si te aparece un error 500 y el error es por alguna falla en el propio .htaccess, obviamente te va a mostrar las páginas por defecto del server


Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Última edición por emprear; 13/10/2011 a las 10:56
  #9 (permalink)  
Antiguo 13/10/2011, 15:31
PanuWeb
Invitado
 
Mensajes: n/a
Puntos:
Pregunta Respuesta: Excluir directorio o archivo de la proteccion de mod_auth

Buen gracias no sabia lo del $_SERVER['REDIRECT_STATUS'];.

Ya hora volviendo al tema principal... Hay alguna forma de excluir un archivo del mod_auth. Lo que quiero es que el index no entre en la restricción del mod_auth así puedo mostrar un mensaje, estamos trabajando y google ya comienza a indexarme el sitio. ¿Se podrá hacer desde el .htaccess?

Gracias de Nuevo

Saludos
  #10 (permalink)  
Antiguo 13/10/2011, 16:24
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Excluir directorio o archivo de la proteccion de mod_auth

La cosa es distinta si lo haces para un solo archivo. Volviendo a mi primer respuesta, si usas la directiva files, que si es admitida en .htaccess. podés probar (digo probar porque ahora no lo puedo verificar)


Código Apache:
Ver original
  1. <FilesMatch "inicio.html">
  2. Satisfy Any
  3. </FilesMatch>

Aunque creo que si esa página de inicio linkea a otros archivos (css, js, imágenes etc), o si es un php que lleva includes, tambien te va a pedir el mod_auth. Asi que esa página de inicio tendria que estar independiente de cualquier otro contenido
otra variante más elaborada y que podria corregir el comportamiento anterior es usar
extensiones agregando
Código Apache:
Ver original
  1. <FilesMatch "\.(js|css|jpg)$">
  2. Satisfy Any
  3. </FilesMatch>

o la inversa , poner el mod_Auth solo para ciertos tipos de archivo

Código Apache:
Ver original
  1. <FilesMatch "\.(php|phtml)$">
  2. AuthType Basic
  3. AuthName "Estadísticas"
  4. AuthUserFile /users/claves/.misclaves
  5. Require valid-user
  6. </FilesMatch>

Son diferentes variantes, sería cosa de que experimentes


Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #11 (permalink)  
Antiguo 13/10/2011, 17:10
PanuWeb
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Excluir directorio o archivo de la proteccion de mod_auth

No puedo creer que me sigas respondiendo . Mil gracias!!!!

Yo ahora tampoco puedo probar el código, pero si no esta bloqueado por el admin del servidor no creo tener problemas.

Lo pruebo u despues subo el código completo para que quede, por si a alguien le sirve.

Saludos
  #12 (permalink)  
Antiguo 13/10/2011, 17:43
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Excluir directorio o archivo de la proteccion de mod_auth

hace 20 dias que estoy enfrascado en la PC con un proyecto 14hs x dia, y mis unicos recreos son los posts del foro...

Saludos y contame los resultados
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #13 (permalink)  
Antiguo 14/10/2011, 19:08
PanuWeb
Invitado
 
Mensajes: n/a
Puntos:
Sonrisa Respuesta: Excluir directorio o archivo de la proteccion de mod_auth

Bueno al final le encontré una solución y la comparto con ustedes:

Planteo del problema: usar autenticación en un sitio para restringir el acceso sólo a personas autorizadas, pero mostrar un mensaje para todos los visitantes. Al mismo tiempo personalizar las paginas de error, y que el error 401 se muestre correctemente.

Estructura del sitio:
Código:
.htaccess
error.php
offline.php
mas los archivos del sitio
Archivo .htaccess
Código Apache:
Ver original
  1. ## AUTENTICACIÓN   
  2. <FilesMatch "\.(php|phtml|js|jpg|gif|png|pdf|css)$">
  3.     AuthName "MI SITIO"
  4.     AuthUserFile /.htpasswds/.htpasswd
  5.     AuthType basic
  6.     Require valid-user
  7. </FilesMatch>
  8.  
  9. <FilesMatch "(error.php|logo.png|offline.php)">
  10.     Satisfy Any
  11. </FilesMatch>
  12.  
  13. ## ERRORES PERSONALIZADOS
  14.  
  15. ErrorDocument 400 /error.php
  16. ErrorDocument 401 /error.php
  17. ErrorDocument 403 /error.php
  18. ErrorDocument 404 /error.php
  19. ErrorDocument 405 /error.php
  20. ErrorDocument 500 /error.php
  21. ErrorDocument 503 /error.php
  22.  
  23. DirectoryIndex offline.php index.php index.html index.htm

Archivo de error.php
Código PHP:
Ver original
  1. <?php
  2. /***      CONFIGURACION      ***/
  3.     $email_webmaster = "[email protected]";
  4.     $img_logo = "images/logo.png";
  5.    
  6. /***      ERRORES      ***/
  7. $status = $_SERVER['REDIRECT_STATUS'];
  8. switch ($status) {
  9.     case 400: $codigos = array('ERROR 400 - ¡Solicitud Incorrecta!','Usaste una sintaxis no v&aacute;lida.','status400');   break;
  10.     case 401: $codigos = array('ERROR 401 - ¡No est&aacute;s Autorizado!','No accediste con las credenciales válidas necesarias.','status400');break;
  11.     case 403: $codigos = array('ERROR 403 - ¡Acceso Prohibido!','No pod&eacute;s entrar a este lugar, est&aacute;s en una   zona restringida de nuestro servidor.','status400');break;
  12.     case 404: $codigos = array('ERROR 404 - ¡No lo Encontramos!','No encontramos la URL que estas buscando.','status400');break;
  13.     case 405: $codigos = array('ERROR 405 - ¡Ese m&eacute;todo no est&aacute; permitido!','Intentaste usar un m&eacute;todo que no est&aacute; permitido.','status400');break;
  14.     case 500: $codigos = array('ERROR 500 - ¡Uyy, tuvimos un error interno!','La p&aacute;gina que queres ver ha causado un error interno.','status500');break;
  15.     case 503: $codigos = array('ERROR 503 - ¡No estamos disponibles por el momento!','Estamos haciendo unas modificaciones y todav&iacute;a no terminamos. Volv&eacute; mas tarde y combrobá si terminamos. Si ten&eacute;s usuario y contrase&ntilde;a entrá <a href="/index.html">ac&aacute;</a>','status500');break; }
  16. ?>
  17. <html>
  18. <head>
  19.     <title><?php echo $codigos[0] ?></title>
  20.     <style type="text/css"><!-- estilos del error    --></style>
  21. </head>
  22. <body>
  23.         <h1 class="<?php echo $codigos[2] ?>"><?php echo $codigos[0] ?></h1>
  24.     <img src="<?php echo $img_logo ?>" />
  25.         <h2>Pas&oacute; lo siguiente:</h2>
  26.         <p><?php echo $codigos[1] ?></p>
  27.     <p>Si tenes una pregunta, ponete en contacto con el webmaster enviando un email a <a href="mailto:<?php echo $email_webmaster ?>"><?php echo $email_webmaster ?></a>.</p>
  28. </body>
  29. </html>

Archivo offline.php
Código HTML:
Ver original
  1. Mensaje que dice que se esta trabajando.

Explicación del .htaccess
  • La Línea 2 a 7 del .htaccess pone autenticación a todos los archivos con la extensiones dadas en la linea 2
  • Las líneas 9 a 11 excluye los archivos listados en la linea 9 de la autenticación
  • de la línea 15 a 21 modificamos los mensajes de error predeterminado de apache
  • Por ultimo en la línea 23 definimos los archivos que mostrara apache cuando sólo se escriba la /. En este caso primero mostrara offline.php y si no lo encuentra mustra el que sigue y así sucesivamente.

Funcionamiento
Cuando se escribe en la barra de direcciones el dominio (www.midominio.com.ar) el servidor busca el archivo offline.php si lo encuentra muestra ese archivo pero si el usuario escribe por ejemplo www.midominio.com.ar/contacto.htm antes de mostrar la página le pedirá que ingrese el usuario y la contraseña. Si no ingresa el usuario y la contraseña muestra el error personalizado 401. De esta forma me permite evitar tener que modificar los enlaces a la pagina de inicio, ya que si se escribe www.midominio.com.ar/index.html me va apedir la contraseña y si el usuario esta autenticado me mostrara el index.html.

Cuando termine de modificar el sitio, renombr el archivo offline.html y quito comento las lineas de la autenticación y el sitio queda funcional sin mas cambios.



Bueno espero haberme explicado correctamente, y que esto les sirva.

Cualquier cosa me preguntan.

Saludos

PanuWeb

Etiquetas: htaccess, mod_auth
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 01:14.