<-
Apache > Servidor HTTP > Documentacin > How-To / Tutoriales

Tutorial de Apache httpd: Introduccin a los Server Side Includes ra2e

Idiomas disponibles: ko

Los Server Side Includes (Inclusiones en la parte Servidor) facilitan un mtodo para aadir contenido dinmico a documentos HTML existentes.

 Apache!

Consulte tambin 382u41

top

Introduccin 4w406i

Este artculo trata sobre los Server Side Includes, generalmente llamados SSI. En este artculo, hablaremos sobre cmo configurar su servidor para permitir SSI, y de tcnicas bsicas de SSI para aadir contenido dinmico a sus pginas HTML existentes.

Ms adelante tambin hablaremos de algunas tcnicas ms avanzadas que pueden usarse con SSI, tales como declaraciones condicionales en sus directivas SSI.

top

Qu son los SSI? 76w6s

SSI (Server Side Includes) son directivas que se introducen en pginas HTML y son evaluadas por el servidor mientras ste las sirve. Le permiten aadir contenido generado de manera dinmica a sus pginas HTML existentes sin tener que servir una pgina entera a travs de un programa CGI, u otra tecnologa para generar contenido dinmico.

Por ejemplo, podra colocar una directiva en una pgina existente de HTML de esta manera:

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

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

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

La decisin sobre cundo usar SSI, o de cundo generar una pgina al completo con algn programa, suele depender generalmente de la cantidad de contenido esttico que contiene, y cunto de esa pgina tiene que ser recalculado cada vez que sta se sirve. SSI es un buen mtodo para aadir pequeas partes de informacin, tales como la hora actual - como se ha mostrado ms arriba. Pero si la mayora de su pgina se tiene que generar en el momento en el que se est sirviendo, necesita buscar otra opcin ms adecuada que no sea SSI.

top

Configurar su servidor para permitir SSI 3r1k41

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 mayora de las configuraciones contienen mltiples directivas Options que pueden sobreescribirse las unas a las otras. Probablemente necesitar aplicar Options al directorio especfico donde quiere SSI activado para asegurarse de que se evala 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 extensin determinada, como por ejemplo .shtml, con las siguientes directivas:

AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

Una desventaja de este mtodo es que si quisiera aadir directivas SSI a una pgina ya existente, tendra que cambiar el nombre de la pgina, y todos los enlaces que apuntasen a esa pgina, todo para poder darle la extensin .shtml y que esas directivas sean interpretadas.

El otro mtodo 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 ejecucin configurado. Asi que para aadir directivas SSI a una pgina existente, en lugar de tener que cambiarle el nombre, solo tendra que convertirla en ejecutable usando chmod.

chmod +x pagename.html

Una breve recomendacin 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. Quizs 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 configuracin del bit de ejecucin, as que esto limita las opciones un poco.

En su configuracin por defecto, Apache no enva la fecha de ltima modificacin o la longitud de contenido de pginas SSI porque es dificil calcular estos valores para contenido dinmico. Esto puede impedir que se cachee un documento, y dar como resultado en apareciencia un rendimiento ms lento del cliente. Hay dos maneras de solucionar esto:

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

Directivas SSI bsicas 4l115l

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 todava sern visibles en el fichero HTML. Si tiene SSI configurado correctamente, la directiva ser reemplazada con su propio resultado.

Esta funcin es una de tantas, y hablaremos de algunas de ellas ms adelante. Por ahora, aqu mostramos unos ejemplos de lo que puede hacer con SSI.

La fecha de hoy 32381a

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

La funcin echo sencillamente muestra el valor de una variable. Hay muchas variables estndar que incluyen un conjunto de variables de entorno disponibles para programas CGI. Tambin puede definir sus propias variables con la funcin set.

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

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

Fecha de modificacin del fichero 6e3d6a

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

Esta funcin tambin est sujeta a configuraciones de formato de timefmt.

Incluyendo los resultados de un programa CGI 2e6k2y

Este es uno de los usos ms 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

Ms ejemplos 5q602o

A continuacin hay algunos ejemplos especficos de cosas que puede hacer con SSI en sus documentos HTML.

Cundo fue modificado este documento? 2s4a2

Antes mencionamos que puede usar SSI para informar al cuando el documento ha sido modificado por ltima vez. Aun as, el mtodo actual para hacerlo se dej en cuestin. El cdigo que se muestra a continuacin, puesto en un documento HTML, pondr ese sello de tiempo en su pgina. Por descontado, tendr que tener SSI habilitado correctamente, como se indic ms arriba.

<!--#config timefmt="%A %B %d, %Y" -->
Ultima modificacin 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 genrico de cdigo que pueda copiar y pegar en cualquier fichero, asi que probablemente necesite usar la variable LAST_MODIFIED en su lugar:

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

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

Incluyendo un pie de pgina estndar gp3o

Si gestiona un sitio que tiene ms de unas cuantas pginas, probablemente se de cuenta de que modificar todas esa pginas es un autntico engorro, especialmente si trata de mantener una apareciencia homognea en todas ellas.

Si usa un Include de fichero para la cabecera y/o pie de pgina puede reducir la carga de trabajo de estas actualizaciones. Solo tiene que hacer un slo pie de pgina, y despus incluirlo en cada pgina con el comando SSI include. La funcin 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 ms til, y debera 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 pgina 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 ms puedo configurar? 133668

Adems de poder configurar el formato de la hora, tambin puede configurar dos cosas ms.

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 funcin config:

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

Afortunadamente, los s finales nunca vern este mensaje, porque habr resuelto todos los problemas con sus directivas SSI antes de publicar su pgina web. (Verdad?)

Y puede configurar el formato en el que los tamaos de fichero se muestran con el formato sizefmt. Puede especificar bytes para un recuento total en bytes, o abbrev para un nmero abreviado en Kb o Mb, segn sea necesario.

top

Ejecutando comandos w6w46

Puede usar la funcin exec para ejecutar comandos. Y SSI puede ejecutar un comando usando la shell (/bin/sh, para ser ms 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 estrao 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 caracterstica es muy peligrosa, puesto que ejecutar cualquier cdigo que est especificado con la etiqueta exec. Si tiene una situacin en la que los s pueden editar contenido en sus pginas web, tales como por ejemplo un ``registro de visitas'', asegrese de tener esta caracterstica deshabilitada. Puede permitir SSI, pero no la caracterstica exec, con el argumento IncludesNOEXEC en la directiva Options.

top

Tcnicas avanzadas de SSI 4192a

Adems de mostrar contenido, SSI en Apache da la opcin de configurar variables y usar esas variables en comparaciones y condicionales.

Configurando Variables 32q38

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

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

Adems 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 smbolo del dolar ($) antes del nombre de la variable.

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

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

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

Por ltimo, si quiere poner una variable entre medias de una cadena de caracteres ms 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 confusin. (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 70726d

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 programacin diminuto. mod_include provee una estrucura if, elif, else, endif para construir declaraciones condicionales. Esto le permite generar de manera efectiva multitud de pginas lgicas desde tan solo una pgina.

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 comparacin lgica - 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 vaca.) Para una lista completa de operadores de comparacin, vea la documentacin de mod_include.

Por ejemplo, si quiere personalizar el texto en su pgina web basado en la hora actual, puede usar la siguiente receta, colocada en su pgina 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 ms informacin sobre el motor de evaluacin 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 dinmico en la parte de servidor sin tener que depender de una aplicacin web al completo.

top

Conclusin 1z1o5y

Desde luego SSI no es un reemplazo para CGI u otras tecnologas que se usen para generar pginas web dinmicas. Pero es un gran mtodo para aadir pequeas cantidaddes de contenido dinmico a pginas web, sin hacer mucho ms trabajo extra.

Idiomas disponibles: ko

top

Comentarios 3f6r1x

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 by our s 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 Libera.chat, or sent to our mailing lists.