Ver Mensaje Individual
  #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