Configuraci´on y uso de Server Side Includes (SSI) en
Apache
Paco Brufal, <
[email protected] >
Versi´on 0.1, Octubre 1999
Este peque˜no documento explica de manera sencilla c´omo configurar y usar las instrucciones Server Side Includes
(SSI) para crear documentos HTML de forma din´amica y sencilla. Asi mismo, este documento se distribuye SIN
NINGUNA GARANTIA bajo licencia GPL. No hace falta decir que se admiten sugerencias, ejemplos, correcciones,
etc. para posteriores revisiones.
Contents
1 Introducci´on.
2 Configuraci´on de Apache
2.1 Datos de la conexi´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Restringir el acceso a determinadas partes del servidor . . . . . . . . . . . . . . . . . . . . . .
2.3 Personalizar las p´aginas de error.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4 Consideraciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3 Anexos
3.1 Anexo A.- Algunas etiquetas interesantes de SSI
. . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Anexo B.- Algunas variables que se pueden usar con SSI . . . . . . . . . . . . . . . . . . . . .
3.3 Anexo C.- C´odigos de Idioma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
2
2
3
3
6
6
6
6
7
1 Introducci´on.
El ”lenguaje” SSI (Server Side Includes) son una serie de ”tags” o etiquetas con un formato determinado,
que se incluyen dentro del c´odigo HTML de una p´agina, d´andole dinamismo y ahorr´andonos algo de trabajo.
El formato de los tags tiene esta forma:
[codigo HTML...]
Hora local: <!--#echo var="$DATE_LOCAL"-->
[codigo HMTL...]
El servidor, al enviar esa orden, la sustituiria por la variable $DATE LOCAL, quedando m´as o menos as´ı:
Hora local: Tuesday, 14-Sep-1999 09:35:23 CEST
El servidor web, antes de enviar ´estas p´aginas, sustituye las etiquetas SSI por sus valores correspondientes,
es decir, crea las p´aginas ”on-the-fly” y las env´ıa al navegador. No voy a extenderme m´as, puesto que el SSI
no tiene demasiada dificultad de aprendizaje. Si deseas saber m´as sobre SSI, visita http://www.apache.org.
2. Configuraci´on de Apache
2
2 Configuraci´on de Apache
Vamos a configurar el servidor Apache. La distribuci´on de Linux que he usado yo es Debian 2.1 (Slink),
aunque no creo que difiera mucho de otras distribuciones. Revisa los ficheros de configuraci´on de tu servidor
y familiarizate con ellos. Si ves que algo de los que pongo no lo tienes en tus ficheros, a˜nadelo. En caso que
lo tengas, pero comentado, descomentalo. Lo primero que necesitamos es decirle que acepte etiquetas SSI
descomentando la siguiente linea en la secci´on de los LoadModule, en el fichero /etc/apache/httpd.conf:
LoadModule includes_module /usr/lib/apache/1.3/mod_include.so
Para que el servidor reconozca la extensi´on .shtml (la que llevan las p´aginas que incluyen SSI), a˜nadiremos
esto al fichero /etc/apache/srm.conf:
# To use server-parsed HTML files
AddType text/html .shtml
AddHandler server-parsed .shtml
Tambi´en podemos poner la opci´on ”XBitHack”. Poniendo esta opci´on, y haciendo ejecutables los ficheros
HTML, el servidor comprobar´a si esos fichero tienen c´odigo SSI.
Ahora vamos al fichero /etc/apache/access.conf. Miramos dentro del bloque ”<Directory /var/www>” (o
lo que es lo mismo, el DocumentRoot, donde se alojan las p´aginas del servidor) y buscamos una linea que
empiece por ”Options”, que estar´a al principio del bloque. Bien, pues si esa linea es algo parecido a esto:
Options Indexes FollowSymLinks
la dejaremos as´ı
Options Indexes FollowSymLinks +Includes
Con esto ya podemos incluir etiquetas SSI en nuestras p´aginas web. Para hacer este documento un poco
m´as util ;) voy a poner unos ejemplos de uso del SSI:
1. Datos de la conexi´on
2. Restringir el acceso a determinadas partes del servidor
3. Personalizar las p´aginas de error
2.1 Datos de la conexi´on
Este ejemplo servir´a para familiarizarnos con SSI. Se trata de una simple p´agina en la que pondremos todos
los tags SSI que queramos, y al verla desde un navegador, el servidor sustituir´a cada variable por su valor
correspondiente, as´ı sabremos qu´e es y para que sirve cada variable.
DATE_GMT <!--#echo var="DATE_GMT" --> <br>
DATE_LOCAL <!--#echo var="DATE_LOCAL" --> <br>
DOCUMENT_NAME <!--#echo var="DOCUMENT_NAME" --> <br>
DOCUMENT_PATH_INFO <!--#echo var="DOCUMENT_PATH_INFO" --> <br>
DOCUMENT_ROOT <!--#echo var="DOCUMENT_ROOT" --> <br>
DOCUMENT_URI <!--#echo var="DOCUMENT_URI" --> <br>
LAST_MODIFIED <!--#echo var="LAST_MODIFIED" --> <br>
GATEWAY_INTERFACE <!--#echo var="GATEWAY_INTERFACE" --> <br>
HTTP_ACCEPT <!--#echo var="HTTP_ACCEPT" --> <br>
HTTP_ACCEPT_CHARSET <!--#echo var="HTTP_ACCEPT_CHARSET" --> <br>
2. Configuraci´on de Apache
3
HTTP_ACCEPT_ENCODING <!--#echo var="HTTP_ACCEPT_ENCODING" --> <br>
HTTP_ACCEPT_LANGUAGE <!--#echo var="HTTP_ACCEPT_LANGUAGE" --> <br>
HTTP_CONNECTION <!--#echo var="HTTP_CONNECTION" --> <br>
HTTP_COOKIE <!--#echo var="HTTP_COOKIE" --> <br>
HTTP_HOST <!--#echo var="HTTP_HOST" --> <br>
HTTP_IF_MODIFIED_SINCE <!--#echo var="HTTP_IF_MODIFIED_SINCE" --> <br>
HTTP_PRAGMA <!--#echo var="HTTP_PRAGMA" --> <br>
HTTP_USER_AGENT <!--#echo var="HTTP_USER_AGENT" --> <br>
PATH <!--#echo var="PATH" --> <br>
QUERY_STRING <!--#echo var="QUERY_STRING" --> <br>
REMOTE_ADDR <!--#echo var="REMOTE_ADDR" --> <br>
REMOTE_HOST <!--#echo var="REMOTE_HOST" --> <br>
REMOTE_PORT <!--#echo var="REMOTE_PORT" --> <br>
REQUEST_METHOD <!--#echo var="REQUEST_METHOD" --> <br>
SCRIPT_FILENAME <!--#echo var="SCRIPT_FILENAME" --> <br>
SERVER_ADMIN <!--#echo var="SERVER_ADMIN" --> <br>
SERVER_NAME <!--#echo var="SERVER_NAME" --> <br>
SERVER_PORT <!--#echo var="SERVER_PORT" --> <br>
SERVER_PROTOCOL <!--#echo var="SERVER_PROTOCOL" --> <br>
SERVER_SIGNATURE <!--#echo var="SERVER_SIGNATURE" --> <br>
SERVER_SOFTWARE <!--#echo var="SERVER_SOFTWARE" --> <br>
SCRIPT_NAME <!--#echo var="SCRIPT_NAME" --> <br>
USER_NAME <!--#echo var="USER_NAME" --> <br>
2.2 Restringir el acceso a determinadas partes del servidor
Con este peque˜no trozo de c´odigo podemos ocultar un enlace seg´un desde donde venga la petici´on de la
p´agina. Es decir, si alguien de nuestra red local solicita una p´agina, el servidor comprobar´a la IP, y si
cumple con la regla SSI, mostrar´a el enlace en la p´agina web. En caso contrario, no lo mostrar´a.
El c´odigo ser´ıa algo as´ı:
[...resto de la p´agina...]
<!--#if expr="$REMOTE_ADDR = /^192.168.1./" -->
<a href="boletin_interno.html">Boletin Interno de la Empresa</a>
<!--#endif -->
[...resto de la p´agina...]
Si la IP que solicita la p´agina est´a en el rango 192.168.1.xxx, podr´a ver el enlace. En cambio, si la IP
212.23.125.56 (p. ej.) solicita la misma p´agina, no ver´a el enlace.
2.3 Personalizar las p´aginas de error.
Con este ejemplo, lo que pretendemos es que cada vez que se produzca un error, el servidor nos diga qu´e
clase de error se ha producido de una manera que cualquier persona lo pueda entender, y no con el t´ıpico
error ”Error 404” y esas cosas. Adem´as, las haremos en varios idiomas, para que cada persona que vea un
error, lo pueda leer seg´un con el idioma preferente que tenga definido en el navegador.
Lo primero que haremos ser´a a˜nadir este bloque al final del fichero /etc/apache/srm.conf
# Asignamos un alias a la ruta /var/errordocs/,
# es decir, que el path /var/errordocs/ ser´a
# la URL http://localhost/errordocs
# (al igual que /usr/lib/cgi-bin/ es http://localhost/cgi-bin/...)
Alias /errordocs /var/errordocs
2. Configuraci´on de Apache
4
# Definimos las propiedades de ese directorio
<Directory /var/errordocs>
AllowOverride none
Options MultiViews IncludesNoExec FollowSymLinks
AddType text/html .shtml
AddHandler server-parsed .shtml
</Directory>
# Asignamos un documento por cada error (puedes poner tantos como errores
# existan).
ErrorDocument 403 /errordocs/403.shtml
ErrorDocument 404 /errordocs/404.shtml
ErrorDocument 500 /errordocs/500.shtml
ErrorDocument 400 /errordocs/400.shtml
Ahora vamos a crear las p´aginas de error, que se alojar´an en el directorio /var/errordocs. Los nombres de
los ficheros han de ser los que definimos en el fichero /etc/apache/srm.conf. El dise˜no de la p´agina es com´un,
lo ´unico que cambia es el cuerpo y el pie de p´agina. Para elegir el idioma del mensaje, usaremos algo as´ı:
<!--#if expr="$HTTP_ACCEPT_LANGUAGE = /^es-ES/" -->
<!--#include virtual="404_es.html" -->
<!--#endif -->
<!--#if expr="$HTTP_ACCEPT_LANGUAGE = /^en/" -->
<!--#include virtual="404_en.html" -->
<!--#endif -->
[...todas las condiciones que desees...]
Al final de cada p´agina de error, incluiremos la orden
<!--#include virtual="foot.shtml"-->
para que en el pie de p´agina aparezcan una serie de datos variables y comunes a todas las p´aginas de error.
Con esto lo que nos ahorramos es trabajo, ya que lo escribimos una vez, y lo podemos usar en todos las p´aginas
de error. Aqui pongo un peque˜no fichero de ejemplo, concretamente el fichero /var/errordocs/404.shtml, que
saldr´a cuando alguien pida una p´agina que no existe:
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="Paco Brufal">
<title>Error!</title>
</head>
<body text="#000000" bgcolor="#000000" link="#0000EF" vlink="#51188E"
alink="#FF0000">
<center>
<!-- Incluimos una imagen de error -->
<img src="/errordocs/error.jpg" width="320" height="89" alt="Error!"
border="0" align="top">
<hr WIDTH="100%">
<!-- Condiciones del idioma -->
2. Configuraci´on de Apache
5
<!--#if expr="$HTTP_ACCEPT_LANGUAGE = /^es-ES/" -->
<!--#include virtual="404_es.html" -->
<!--#endif -->
<!--#if expr="$HTTP_ACCEPT_LANGUAGE = /^en/" -->
<!--#include virtual="404_en.html" -->
<!--#endif -->
<!-- [...todas las condiciones que desees...] -->
<!-- El pie de p´agina es comun -->
<!--#include virtual="foot.shtml" -
Comentarios de: Configuración y uso de Server Side Includes (SSI) en Apache (0)
No hay comentarios