viernes, 19 de marzo de 2010

Personalizar arcivos Index con htaccess

 Si deseamos modificar los archivos que se cargan por defecto al entrar a un directorio web, podemos hacerlo mediante la siguiente instrucción:

DirectoryIndex index.html index.php index.htm

 Apache buscara cada uno de estos elementos; sino existe index.html, buscara index.php y asi sucesivamente

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 !!. 

martes, 15 de septiembre de 2009

Exemplo sencillo .htaccess,FilesMatch

Configuración por defecto de .htaccess

Si intentas acceder a tu fichero .htaccess mediante un navegador web, seguramente obtienes un error de acceso denegado (caso contrario deberías revisar tu configuración :D).

Esto pasa porque el archivo de configuración por defecto de apache incluye algunas líneas que prohíben el acceso a cualquier archivo cuyo nombre comience de la forma .ht Identifiquemos las líneas de código: dentro del archivo de configuración httpd encontramos

<FilesMatch "^\.ht">
Order allow,deny
Deny from all
</FilesMatch>

FilesMatch: indica que la regla posteriormente definida se aplicara a los archivos que cumplan cierta condición

Condicion: sentencia que decide a que archivos se aplicaran las reglas posteriormente definidas, en este caso se trata de una sencilla expresion regular que explicaré a continuación...


  • ^ es un indicador global podría traducirse como (todo archivo que comience con)

  • \. Representa el carácter punto (.) cuando hablamos de expresiones regulares debemos tener en cuenta caracteres y meta caracteres, para que un meta carácter sea interpretado como un carácter ordinario es necesario escaparlo previamente, de eso se encarga la barra invertida (\).

  • ht caracteres ordinarios, simplemente indican que la expresión debe coincidir (en dicha parte de la condición) con la forma exacta (ht).

Pasando en limpio e intentando comunicar la condición en “lenguaje natural” por llamarlo de alguna manera. Podríamos decir que: “Se denegara el acceso a todos aquellos archivos cuyo nombre comience con .ht”

¡Valla! a que viéndolo de esa forma es muy sencillo. Quiero destacar que las expresiones regulares son una herramienta extremadamente poderosa, utilizándolas correctamente es posible lograr cosas sorprendentes :O. Por el momento no voy a extenderme en este tema asique recomiendo leer algún tutorial de expresiones regulares, Saludos.

Cambiando el nombre a .htaccess y razones para hacerlo.

En la práctica, son contados los casos en que surge la necesidad de modificar el nombre del htaccess. Sin embargo apache es muy configurable y si se tienen claros los objetivos a alcanzar y se poseen los conocimientos suficientes para manipularlo, puede ahorrarnos más de un dolor de cabeza.

Para modificar el nombre del fichero que deseemos utilizar como .htaccess basta con identificar el archivo de configuración httpd-default (no pongo su ubicación ya que esta varía según el sistema operativo y la ruta de instalación, pero una simple búsqueda debería ser suficiente para localizarlo).

Una vez dentro identificamos las siguientes líneas:

# AccessFileName: The name of the file to look for in each directory
# for additional configuration directives. See also the AllowOverride
# directive.
AccessFileName .htaccess

Lugo de la definición AccesFileName ponemos el nombre del archivo que deseamos utilizar como archivo de configuración (debe comenzar con un punto (.)). Eso es todo, para que los cambios tengan efecto es necesario reiniciar el servidor. Para esto introducimos en la consola el siguiente comando.

apachectl -k restart

Es posible que estés acostumbrado a reiniciar apache de otra forma. Más adelante veremos en qué casos es recomendable usar una u otra orden para reiniciar el servidor.


  • Vale le he cambiado el nombre al .htaccess ¿para qué?

  • Varias son las motivaciones que podemos tener para modificar el nombre del fichero de configuración, pude ser solo por comodidad (en caso que usemos el htaccess solo para generar urls amigables podríamos nombrarlo .configUrls). Seguridad: al escribir esto puedo ser criticado y seguramente con razón. Lo cierto es que la seguridad por ocultación funciona y cuantos menos datos disponga el atacante sobre el objetivo mejor. Por lo tanto, nombrar al fichero .htaccess de otra forma puede ser un refuerzo más para la seguridad de nuestro sitio/aplicación web. ¿Nunca has oído hablar de la seguridad por ocultación/oscuridad? No hay problema una simple búsqueda al San Google te ayudara

¿Que es y para qué sirve el .htaccess?

Un fichero .htaccess (hypertext access), también conocido como archivo de configuración distribuida. Es un archivo que nos permite definir directivas de configuración que afecten a uno o más directorios sin necesidad de editar la configuración por defecto de apache.

A efectos prácticos, gracias a los archivos .htaccess podremos tener una configuración por defecto, en /ruta/directorio1 otra distinta en /ruta/directorio2, /ruta/directorioX.

Teniendo en cuenta que recién estamos comenzando a introducirnos en las características y descubriendo la potencialidad de .htaccess. Solo teniendo en cuenta estos primeros párrafos podríamos preguntarnos.

  • ¿Por qué es tan importante este fichero?

  • Es normal que en un servidor pocas personas tengan acceso con privilegios totales (root). Por lo tanto solo unos pocos usuarios tienen la posibilidad de modificar las directivas de configuración de apache. Si no poseemos un servidor dedicado y contratamos un servicio de hosting para subir una o varias webs, nos darán un usuario con permisos limitados. Además generalmente un servidor es utilizado por un gran número de usuarios. Un cambio en la configuración por defecto de apache afectaría a todos los usuarios y el servidor se convertiría en un autentico caos :O. Sin embargo y gracias al fichero .htaccess cada usuario puede establecer las directivas de configuración necesarias para su aplicación web, blog, página personal etc, etc.
  • ¿Por qué debería estudiar su funcionamiento?

  • Aun es demasiado pronto para responder a esta, a medida que el usuario avance en la lectura de este manual ira formando su conclusión. Por el momento puedo decir que el fichero .htaccess es una herramienta indispensable para programadores, diseñadores, SEO y SEM managers. Conocer sus potencialidades y limitaciones sin duda ayudara a aumentar considerablemente la calidad de las aplicaciones/sitios web, el rendimiento del servidor y hasta ayudara a reducir los costes de producción.