sábado, 2 de enero de 2010

Manejo de Errores con htaccess 404 500 etc


Ya a estas alturas es son escasos los sitios que utilizan documentos de error por defecto en sus aplicaciones/sitios web. Cuando no hay una pagina de error personalizada, el navegador del usuario decide que mostrar en base al estado devuelto por el servidor. 

Se ha demostrado que crear paginas personalizadas de error no solo mejora la estática del sitio, también puede ser de gran ayuda para hacer conocer al usuario información relevante. Ofrecer búsquedas internas / externas con la información que intentaba localizar el usuario e incluso mostrar publicidad contextual ( el impacto es realmente pequeño, pero para que desaprovecharlo no :)  ). Personalmente me gusta mostrar en las paginas 404 el listado de paginas más votadas, y las noticias destacadas por los usuarios (ami me funciona así ) pero puede mostrarse cualquier otra cosa que se considere pertinente dependiendo de la temática y tipo de usuario del sitio a modificar.

el código para manejar los errores es el siguiente.  

[ErrorDocument]: es la directiva que indica al servidor que debe hacer en caso de ocurrir un error.

[error code]: se especifica de que error estamos hablando  

[document]: se especifica la ruta del documento a ejecutar, fijaos que se puede escribir de todas las formas posibles. Como podemos ver en el ultimo ejemplo, también es posible hacer que el navegador muestre un mensaje personalizado, aunque no es una opción muy utilizada en la practica. 


ErrorDocument 500 http://foo.example.com/debug/
ErrorDocument 404 /error/404.php
ErrorDocument 401 /info.html
ErrorDocument 403 "Hoy es navidad deja un rato internet y ve a saludar a tu familia"


Los errores usados en el ejemplo son de lo más común y creo que todo el mundo los conoce, sin embargo no son los únicos código de error, hay muchos más que pueden encontrarlos mediante una búsqueda rápida en google o en la guia oficial de apache. 

Espero que algo de esto haya sido de utilidad. Adiós !! 

urls www y htaccess

Como seguramente habrán podido comprobar entre los millones de sitios en que navegan diariamente, Algunos usan nombres de dominio con WWW y otros sitios sin WWW. En la actualidad, al no ser necesario utilizar el prefijo www, para resolver paginas, se gana en comodidad y sencillez; es más fácil recordar google.com que www.google.com. 


Por eso se ha generalizado la adopción de nombres de dominio sin WWW. Sin embargo generalmente ambos dominios coexisten, con y sin WWW, resuelven correctamente el sitio en cuestión. Esto es porque ambas opciones apuntan correctamente a la IP donde este el sitio hospedado (delegación A)


Esta situación trae aparejada un pequeño problema que podemos resolver fácilmente gracias a la ayuda del fichero htaccess. El problema es que el gran Google, toma dominios con y sin WWW como entes independientes, entonces puede posicionar de una forma a el dominio con WWW y de otra al domino sin, obviamente el contenido se tomara como duplicado puesto que sería idéntico.


Pero no desesperar la solución a este inconveniente es de lo más simple, solo es necesario añadir al htaccess las siguientes lineas


Options +FollowSymlinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,NC,L]



Analicemos el código por partes. 


La primera linea "Options +FollowSymlinks" le "dice" a apache que debe seguir todos los enlaces simbólicos,independientemente de si estemos o no utilizando enlaces simbólicos, esta instrucción aumentara el rendimiento del servidor, puesto que no se efectuara la comprobación de si un enlace es o no simbólico. Si no sabes que es un enlace simbolico puedes tomarte solo 3 minututos para averiguarlo en wikipedia Enlace Simbolico - Wikipedia. 


La segunda linea ya creo que todo el mundo la conoce "RewriteEngine on" se encarga de poner en marcha el motor de reescritura. 
La tercera linea comienza a realizar la magia en si, establece bajo que condición se va a redirigir la URL ingresada. %{HTTP_HOST} es una variable de entorno de apache que contiene la url del HOST y ^www\.(.*) es la expresión regular que establece de echo bajo que condición deberá efectuarse la re dirección. 
La cuarta linea se encarga de realizar la re dirección en si. 


En las lineas 3 y 4 vemos algunas instrucciones adicionales encerradas entre corchetes [ ], estas instrucciones nos ayudan a simplificar aspectos de la expresión regular y aportar funcionalidad extra. por ejemplo [NC] ( no case ) hace que la instrucción no diferencia entre mayúsculas y minúsculas. R=301 indica que la redirección debe ser de tipo 301, es decir, que la paguina se mueve definitivamente a la nueva dirección, gracias a estas indicaciones los robots pueden mover el pagerank y los backlinks a la nueva dirección, por tanto todo trabajo de posicionamiento que se aya realizado sobre el sitio se conserva.  


Espero que a alguien le haya sido de ayuda :) se que no entro en muchos detalles aunque si si me expandí un poco mi idea era solo postear el codigo y me he ido por las ramas, cualquier duda, pueden usar los comentarios. Saludos !!.