<-
Apache > Servidor HTTP > Documentaci�n > Versi�n 2.4 > How-To / Tutoriales

Tutorial de Apache httpd: Introducci�n a los Server Side Includes

Idiomas disponibles:  en  |  es  |  fr  |  ja  |  ko 

Los Server Side Includes (Inclusiones en la parte Servidor) facilitan un m�todo para a�adir contenido din�mico a documentos HTML existentes.

Support Apache!

Consulte tambi�n

top

Introducci�n

Este art�culo trata sobre los Server Side Includes, generalmente llamados SSI. En este art�culo, hablaremos sobre c�mo configurar su servidor para permitir SSI, y de t�cnicas b�sicas de SSI para a�adir contenido din�mico a sus p�ginas HTML existentes.

M�s adelante tambi�n hablaremos de algunas t�cnicas m�s avanzadas que pueden usarse con SSI, tales como declaraciones condicionales en sus directivas SSI.

top

�Qu� son los SSI?

SSI (Server Side Includes) son directivas que se introducen en p�ginas HTML y son evaluadas por el servidor mientras �ste las sirve. Le permiten a�adir contenido generado de manera din�mica a sus p�ginas HTML existentes sin tener que servir una p�gina entera a trav�s de un programa CGI, u otra tecnolog�a para generar contenido din�mico.

Por ejemplo, podr�a colocar una directiva en una p�gina existente de HTML de esta manera:

<!--#echo var="DATE_LOCAL" -->

Y, cuando se sirve la p�gina, este fragmento ser� evaluado y sustituido con su resultado:

Tuesday, 15-Jan-2013 19:28:54 EST

La decisi�n sobre cu�ndo usar SSI, o de cu�ndo generar una p�gina al completo con alg�n programa, suele depender generalmente de la cantidad de contenido est�tico que contiene, y cu�nto de esa p�gina tiene que ser recalculado cada vez que �sta se sirve. SSI es un buen m�todo para a�adir peque�as partes de informaci�n, tales como la hora actual - como se ha mostrado m�s arriba. Pero si la mayor�a de su p�gina se tiene que generar en el momento en el que se est� sirviendo, necesita buscar otra opci�n m�s adecuada que no sea SSI.

top

Configurar su servidor para permitir SSI

Para permitir SSI en su servidor, debe tener la siguiente directiva en su fichero apache2.conf , o en un fichero .htaccess:

Options +Includes

Esto le dice a Apache que quiere permitir que se examinen los ficheros buscando directivas SSI. Tenga en cuenta que la mayor�a de las configuraciones contienen m�ltiples directivas Options que pueden sobreescribirse las unas a las otras. Probablemente necesitar� aplicar Options al directorio espec�fico donde quiere SSI activado para asegurarse de que se eval�a en �ltimo lugar y por tanto se acabar� aplicando.

No todos los ficheros se examinan buscando directivas SSI. Usted Le tiene que indicar a Apache qu� ficheros se tienen que examinar. Hay dos formas de hacer esto. Puede decirle a Apache que examine cualquier fichero con una extensi�n determinada, como por ejemplo .shtml, con las siguientes directivas:

AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

Una desventaja de este m�todo es que si quisiera a�adir directivas SSI a una p�gina ya existente, tendr�a que cambiar el nombre de la p�gina, y todos los enlaces que apuntasen a esa p�gina, todo para poder darle la extensi�n .shtml y que esas directivas sean interpretadas.

El otro m�todo es usar la directiva XBitHack :

XBitHack on

XBitHack le dice a Apache que examine ficheros buscando directivas SSI si los ficheros tienen el bit de ejecuci�n configurado. Asi que para a�adir directivas SSI a una p�gina existente, en lugar de tener que cambiarle el nombre, solo tendr�a que convertirla en ejecutable usando chmod.

chmod +x pagename.html

Una breve recomendaci�n de qu� no hay que hacer. Ocasionalmente vemos gente recomendar que le diga a Apache que examine todos los ficheros .html para activar SSI, para no tener que lidiar renombrando los ficheros a .shtml. Quiz�s estas personas no hayan oido hablar de XBitHack. Lo que hay que tener en cuenta, es que haciendo eso, est� pidiendo al Apache que lea cada uno de los ficheros que manda al cliente, incluso si no contenien directivas SSI. Esto puede ralentizar bastante el servidor, y no es una buena idea.

Por supuesto, en Windows, no hay tal cosa como la configuraci�n del bit de ejecuci�n, as� que esto limita las opciones un poco.

En su configuraci�n por defecto, Apache no env�a la fecha de �ltima modificaci�n o la longitud de contenido de p�ginas SSI porque es dificil calcular estos valores para contenido din�mico. Esto puede impedir que se cachee un documento, y dar como resultado en apareciencia un rendimiento m�s lento del cliente. Hay dos maneras de solucionar esto:

  1. Usando la configuraci�n XBitHack Full. Esto le indica a apache que determine la fecha de �ltima modificaci�n mirando s�lo la fecha del fichero que se ha solicitado originalmente, obviando la modificaci�n de cualquier otro fichero al que se hace referencia mediante SSI.
  2. Use las directivas facilitadas por mod_expires para configurar una expiraci�n espec�fica de tiempo en sus ficheros, y as� hacer saber a proxies o navegadores web que es aceptable cachearlos.
top

Directivas SSI b�sicas

Las directivas SSI tienen la sintaxis siguiente:

<!--#function attribute=value attribute=value ... -->

Se formatean como comentarios HTML, as� si no tiene SSI habilitado correctamente, el navegador las obviar�, pero todav�a ser�n visibles en el fichero HTML. Si tiene SSI configurado correctamente, la directiva ser� reemplazada con su propio resultado.

Esta funci�n es una de tantas, y hablaremos de algunas de ellas m�s adelante. Por ahora, aqu� mostramos unos ejemplos de lo que puede hacer con SSI.

La fecha de hoy

<!--#echo var="DATE_LOCAL" -->

La funci�n echo sencillamente muestra el valor de una variable. Hay muchas variables est�ndar que incluyen un conjunto de variables de entorno disponibles para programas CGI. Tambi�n puede definir sus propias variables con la funci�n set.

Si no le gusta el formato en el que se imprime la fecha, puede usar la funci�n config, con un atributo timefmt para modificar ese formato.

<!--#config timefmt="%A %B %d, %Y" -->
Today is <!--#echo var="DATE_LOCAL" -->

Fecha de modificaci�n del fichero

La �ltima modificaci�n de este documento <!--#flastmod file="index.html" -->

Esta funci�n tambi�n est� sujeta a configuraciones de formato de timefmt.

Incluyendo los resultados de un programa CGI

Este es uno de los usos m�s comunes de SSI - para sacar el resultado de un programa CGI, tal y como ocurre con el que fuera el programa favorito de todos, un ``contador de visitas.''

<!--#include virtual="/cgi-bin/counter.pl" -->

top

M�s ejemplos

A continuaci�n hay algunos ejemplos espec�ficos de cosas que puede hacer con SSI en sus documentos HTML.

�Cu�ndo fue modificado este documento?

Antes mencionamos que puede usar SSI para informar al usuario cuando el documento ha sido modificado por �ltima vez. Aun as�, el m�todo actual para hacerlo se dej� en cuesti�n. El c�digo que se muestra a continuaci�n, puesto en un documento HTML, pondr� ese sello de tiempo en su p�gina. Por descontado, tendr� que tener SSI habilitado correctamente, como se indic� m�s arriba.

<!--#config timefmt="%A %B %d, %Y" -->
Ultima modificaci�n de este fichero <!--#flastmod file="ssi.shtml" -->

Obviamente, necesitar� sustituir el nombre de fichero ssi.shtml con el nombre real del fichero al que usted hace referencia. Esto puede ser inconveniente si solo est� buscando un trozo gen�rico de c�digo que pueda copiar y pegar en cualquier fichero, asi que probablemente necesite usar la variable LAST_MODIFIED en su lugar:

<!--#config timefmt="%D" -->
�ltima modificaci�n de este fichero <!--#echo var="LAST_MODIFIED" -->

Para m�s detalles sobre el formato timefmt, vaya a su buscador favorito y busque strftime. La sintaxis es la misma.

Incluyendo un pie de p�gina est�ndar

Si gestiona un sitio que tiene m�s de unas cuantas p�ginas, probablemente se de cuenta de que modificar todas esa p�ginas es un aut�ntico engorro, especialmente si trata de mantener una apareciencia homog�nea en todas ellas.

Si usa un Include de fichero para la cabecera y/o pie de p�gina puede reducir la carga de trabajo de estas actualizaciones. Solo tiene que hacer un s�lo pie de p�gina, y despu�s incluirlo en cada p�gina con el comando SSI include. La funci�n include puede determinar qu� fichero incluir cuando usa el atributo file, o el atributo virtual. El atributo file es una ruta de fichero, relativa al directorio actual. Eso significa que no puede ser una ruta de fichero absoluta (que comienza con /), ni tampoco puede contener ../ como parte de la ruta. El atributo virtual es probablemente m�s �til, y deber�a especificar una URL relativa al documento que se est� sirviendo. Puede empezar con una /, pero debe estar en el mismo servidor que el fichero que se est� sirviendo.

<!--#include virtual="/footer.html" -->

Frecuentemente combinaremos las dos �ltimas, poniendo una directiva LAST_MODIFIED dentro de un fichero de pie de p�gina que va a ser incluido. Se pueden encontrar directivas SSI en el fichero que se incluye, las inclusiones pueden anidarse - lo que quiere decir, que el fichero incluido puede incluir otro fichero, y as� sucesivamente.

top

�Qu� m�s puedo configurar?

Adem�s de poder configurar el formato de la hora, tambi�n puede configurar dos cosas m�s.

Generalmente, cuando algo sale mal con sus directivas SSI, obtiene el mensaje (ha ocurrido un error procesando esta directiva)

[an error occurred while processing this directive]

Si quiere cambiar ese mensaje por otra cosa, puede hacerlo con el atributo errmsg para la funci�n config:

<!--#config errmsg="[Parece que no sabe c�mo usar SSI]" -->

Afortunadamente, los usuarios finales nunca ver�n este mensaje, porque habr� resuelto todos los problemas con sus directivas SSI antes de publicar su p�gina web. (�Verdad?)

Y puede configurar el formato en el que los tama�os de fichero se muestran con el formato sizefmt. Puede especificar bytes para un recuento total en bytes, o abbrev para un n�mero abreviado en Kb o Mb, seg�n sea necesario.

top

Ejecutando comandos

Puede usar la funci�n exec para ejecutar comandos. Y SSI puede ejecutar un comando usando la shell (/bin/sh, para ser m�s precisos - o la shell de DOS , si est� en Win32). Lo siguiente, por ejemplo, le dar� un listado de ficheros en un directorio.

<pre>
<!--#exec cmd="ls" -->
</pre>

o, en Windows

<pre>
<!--#exec cmd="dir" -->
</pre>

Notar� un formato estra�o con esta directiva en Windows, porque el resultado de dir contiene la cadena de caracterers ``<dir>'' ,que confunde a los navegadores.

Tenga en cuenta de que esta caracter�stica es muy peligrosa, puesto que ejecutar� cualquier c�digo que est� especificado con la etiqueta exec. Si tiene una situaci�n en la que los usuarios pueden editar contenido en sus p�ginas web, tales como por ejemplo un ``registro de visitas'', aseg�rese de tener esta caracter�stica deshabilitada. Puede permitir SSI, pero no la caracter�stica exec, con el argumento IncludesNOEXEC en la directiva Options.

top

T�cnicas avanzadas de SSI

Adem�s de mostrar contenido, SSI en Apache da la opci�n de configurar variables y usar esas variables en comparaciones y condicionales.

Configurando Variables

Usando la directiva set, puede configurar variables para su uso posterior. La sintaxis es como sigue:

<!--#set var="name" value="Rich" -->

Adem�s de configurar valores literales como esto, puede usar cualquier otra variable, incluyendo variables de entorno o las variables que se han mencionado antes (como por ejemplo LAST_MODIFIED) para dar valores a sus variables. Podr� especificar que algo es una vaiable, en lugar de una cadena de caracters literal, usando el s�mbolo del dolar ($) antes del nombre de la variable.

<!--#set var="modified" value="$LAST_MODIFIED" -->

Para poner el s�mbolo del dolar de manera literal en un valor de su variable tendr� que escapar el s�mbolo del dolar con una barra "\".

<!--#set var="cost" value="\$100" -->

Por �ltimo, si quiere poner una variable entre medias de una cadena de caracteres m�s larga, y se da la coincidencia de que el nombre de la variable se encontrar� con otros caracteres, y de esta manera se confundir� con otros caracteres, puedes poner el nombre de la variable entre llaves, y as� eliminar la confusi�n. (Es dificil encontrar un buen ejemplo para esto, pero con �ste a lo mejor entiende lo que tratamos de transmitir.)

<!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" -->

Expresiones condicionales

Ahora que tenemos variables, y somos capaces de comparar sus valores, podemos usarlas para expresar condicionales. Esto permite a SSI ser un cierto tipo de lenguaje de programaci�n diminuto. mod_include provee una estrucura if, elif, else, endif para construir declaraciones condicionales. Esto le permite generar de manera efectiva multitud de p�ginas l�gicas desde tan solo una p�gina.

La estructura de este sistema condicional es:

<!--#if expr="test_condition" -->
<!--#elif expr="test_condition" -->
<!--#else -->
<!--#endif -->

Una test_condition puede ser cualquier tipo de comparaci�n l�gica - o bien comparando valores entre ellos, o probando la ``verdad'' (o falsedad) de un valor en particular. (Una cadena de caracteres cualquiera es verdadera si no est� vac�a.) Para una lista completa de operadores de comparaci�n, vea la documentaci�n de mod_include.

Por ejemplo, si quiere personalizar el texto en su p�gina web basado en la hora actual, puede usar la siguiente receta, colocada en su p�gina HTML:

Good <!--#if expr="%{TIME_HOUR} <12" -->
morning!
<!--#else -->
afternoon!
<!--#endif -->

Cualquier otra variable (o bien las que defina usted, o variables de entorno normales) puede usarse en declaraciones condicionales. Vea Expresiones en el Servidor Apache HTTP para m�s informaci�n sobre el motor de evaluaci�n de expresiones.

Con la habilidad de Apache de configurar variables de entorno con directivas SetEnvIf, y otras directivas relacionadas, esta funcionalidad puede llevarle a hacer una gran variedad de contenido din�mico en la parte de servidor sin tener que depender de una aplicaci�n web al completo.

top

Conclusi�n

Desde luego SSI no es un reemplazo para CGI u otras tecnolog�as que se usen para generar p�ginas web din�micas. Pero es un gran m�todo para a�adir peque�as cantidaddes de contenido din�mico a p�ginas web, sin hacer mucho m�s trabajo extra.

Idiomas disponibles:  en  |  es  |  fr  |  ja  |  ko 

top

Comentarios

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.