В этой статье я приблизительно расскажу о том как
    практически использовать технологию SSI.
    Естественно это не 100% вариант, вариации возможны, одна из главных задач -
    понять "а зачем это нужно". Нужно учесть:
    Прежде всего поддерживает ли Ваш сервер технологию SSI
    Что дочерними файлами являются SHTML странички, которые в свою очередь тоже
    обрабатываются на наличие SSI.
    Что "переменных окружения" ("environment variables") типа: DOCUMENT_NAME в
    дочерних документах показывает родительские параметры
    Что переменные передаются дочерним и следующим по выполнению документам
    кроме - указания ошибок <!--#config errmsg="[error]" -->
    Что пути к скриптам в дочерних документах идут относительно дочерних
    документов
    Что пути к графике при выводе идут относительно родительского документа
    
    Структура странички выглядит приблизительно вот так:
    Родитель news.shtml
    <html>
    <head> 
    Переменные SSI 
    Имя страницы <title>Название странички</title>
    Мэтатеги <!--#include virtual="путь_к_скрипту/mt.shtml" --> 
    Стили <!--#include virtual="путь_к_скрипту/styles.shtml" --> 
    JavaScript <!--#include virtual="путь_к_скрипту/js.shtml" --> 
    </head><body>
    Верх сайта <!--#include virtual="путь_к_скрипту/top.shtml" -->
    Табличка - структура сайта, для примера разбита на 3 частей. 
    
    SSI path/left.shtml SSI path/start.shtml SSI path/right.shtml 
    
    Низ сайта <!--#include virtual="путь_к_скрипту/botom.shtml" -->
    </body></html> 
    
    Нужно учесть:
    Что и верх и низ сайта (include virtual) не находятся в общей таблице.
    Так быстрее будет отображаться информация на экране. 
    
    
    
    Переменные SSI В этой части создаются переменные которые используются по
    всему сайту; 
    одни для удобства,
    другие для удобного и быстрого изменения дизайна,
    третие для возможности демонстрации навигации и ведения статистики.
    Грамматика: #set var=*** value=***
    Присваивает новое значение переменной. Например:
    <!--#set var="SERVER_ADMIN" value="новый@адрес.ua"-->
    
    Переменные:
    Название странички - <!--#set var="NamePage" value="НОВОСТИ" -->
    SSI-команда - <!--#config errmsg="[ERROR $NamePage]" --> Выводится при какой
    то ошибке SSI
    URL странички - <!--#set var="WWW" value="http://$HTTP_HOST/km/" --> Обычно
    это полезно для длинных путей
    Цвет бекграунда - <!--#set var="COLORBCG" value="FAF6EF"--> Значок #
    желательно не ставить
    Цвет заливки 1 - <!--#set var="COLORfonA" value="FBF7EE"-->
    Цвет заливки 2 - <!--#set var="COLORfonB" value="D8F3D8"-->
    Цвет заливки 3 - <!--#set var="COLORfonС" value="008000"-->
    Цвет титров 1 - <!--#set var="COLORtitrA" value="800000"-->
    Цвет титров 2 - <!--#set var="COLORtitrB" value="008000"-->
    Цвет титров 3 - <!--#set var="COLORtitrС" value="404040"-->
    Заменив один из параметров "цвета" у вас поменяется его значение во всех
    дочерних документах
    Для большей наглядности мы перенесем наши переменные на несколько страниц,
    чтобы у каждой страницы был свой стиль.
    На родителе мы оставляем: SSI-команду ошибки и URL странички, но это после
    такого скрипта
    <!--#if expr="$QUERY_STRING=/ssi/" -->
    <!--#include virtual="path/varssi.shtml" -->
    <!--#elifexpr="$QUERY_STRING=/new/" -->
    <!--#include virtual="path/varnew.shtml" -->
    <!--#else -->
    <!--#include virtual="path/var.shtml" -->
    <!--#endif -->
    ...
    <!--#config errmsg="[ERROR $NamePage]" -->
    <!--#set var="WWW" value="http://$HTTP_HOST/" --> 
    В каждом из файлов: varssi.shtml, varnew.shtml и var.shtml вписаны
    переменные "цвета" с различными параметрами
    Как это работает: Если в строке после названия файла будет часть слова с
    символами "ssi" то считыватся будет страничка varssi.shtml с своими
    параметрами "цвета"
    Соответственно при символах "new" страничка - varnew.shtml. Если ничего
    подобного не находится - то страничка var.shtml.
    Те переменные которые должны быть разными для разных страничек - лучше
    вписывать в файлы var***.shtml, а те которые раз и на всегда в var.shtml 
    
    
    Имя страницы Проще написать <title>Название странички</title>
    Но можно и так <title><!--#echo var="NamePage"--></title>
    Переменная NamePage будет использоваться еще много раз, поэтому поменяв
    переменную в установках "set var=" она меняется автоматически везде. 
    
    
    Мэтатеги Создав один раз страничку mt.shtml со всеми метатэгами Вы
    избавляетесь от их написания для каждой странички, а также их редактирования
    в каждой страничке в отдельности. 
    Нужно учесть что в страничку вы пишете только метатэги без <html><head></body></html>
    например :
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    
    Некоторые сразу возмутятся что мой FrontPage перегенерирует (создаст заново)
    все странички с моими изменениями. Да но после этого вам нежно закачать все
    странички на сервер, а если их 200, а закачав Вы поняли что не все дописали
    или что не так, и что все сначала. А здесь одну страничку поменяли и для все
    одинаково.
    Теперь другие возмутятся, что не бывает так что у всех страничках одинаковые
    метатэги должны быть. Да я соглашусь, что некоторые странички должны иметь
    другие мэтатеги. Как это решить - например:
    Содержимое форума не надо кэшировать : 
    
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
    <!--#else -->
    <META HTTP-EQUIV="Cache-Control" CONTENT="Public"> 
    <!--#endif -->
    
    Как это работает: Если в имени файла будет строка "forum", то впишется
    строка с параметром "no-cache", для всех остальных строка с параметром "Public".
    
    
    
    Стили Как и в предыдущем варианте создается файл styles.shtml без html, head,
    body.
    Внутри может быть:
    Простая ссылка - <link rel="stylesheet" type="text/css" href="kms.css"> 
    Или выбор в зависимости от браузера
    
    <!--#ifexpr="$HTTP_USER_AGENT=/MSIE/ || $HTTP_USER_AGENT=/Microsoft/" -->
    <link rel="stylesheet" type="text/css" href="kmsi.css"> 
    <!--#elifexpr="$HTTP_USER_AGENT=/Opera/" -->
    <link rel="stylesheet" type="text/css" href="kmso.css"> <BR><!--#elifexpr="$HTTP_USER_AGENT=/Mozilla/"
    -->
    <link rel="stylesheet" type="text/css" href="kmsn.css">
    <!--#else -->
    <STYLE type=text/css>
    P { FONT-FAMILY: tahoma, verdana, arial, helvetica; FONT-SIZE: 12px}
    TD {FONT-FAMILY: verdana, arial, helvetica; FONT-SIZE: 12px}
    A {TEXT-DECORATION: none;color: "black"}
    A:hover {TEXT-DECORATION: none; COLOR: #800040;}
    INPUT {font-family: Tahoma; color:black; font-size=13px;}
    </STYLE> 
    <!--#endif -->
    Как это работает: В зависимости от того что находится в переменной ("environment
    variables") $HTTP_USER_AGENT какой тип браузера у Вас и выводится от сервера
    к Вам только та часть, которая соответствует браузеру. Ну и если браузер не
    опредияется то выводится опредиленный набор стиля что после строки <!--#else
    -->.
    Это все конечно размером в байты, но нужно учесть что это все находится в
    отдельном файле styles.shtml который легко редактировать и работает для всех
    страниц сайта. 
    
    
    JavaScript Как и в предыдущих вариантах создается файл js.shtml без html,
    head, body.
    Внутри может быть:
    Простая ссылка - <SCRIPT language=JavaScript src="/win_open.js"></SCRIPT>
    
    Или выбор в зависимости от страницы
    
    <!--#if expr="$DOCUMENT_NAME!=/forum/" -->
    <SCRIPT language=JavaScript src="../js/win_open.js"></SCRIPT> 
    <!--#endif -->
    
    То есть скрипт будет присутствовать на всех страницах кроме тех в которых в
    имени будет присутствовать слово forum 
    
    
    Верх сайта Как и в предыдущих вариантах создается файл top.shtml без html,
    head, body.
    Внутри может быть целый комплекс дизайнерского решения, поэтому мы
    ограничимся большим названием и выводом банера :
    
    <FONT color="#<!--#echo var="COLORtitrA" -->" style="font-size:
    22px;text-align: center;"><!--#echo var="NamePage" --></FONT> 
    
    То есть на место color (цвет фонта) будет вписана переменная COLORtitrA
    которую мы определили еще в родительском файле news.shtml и var.shtml там же
    и переменная NamePage с названием страницы.
    Вернемся обратно к файлу top.shtml, и сделаем вывод банера
    <!--#include virtual="path/baners.shtml" -->
    Вот оно чудо, как часто Вы меняете банерщиков например по обмену, плохой CTR
    - меняйте. Естественно в одном файле - baners.shtml
    хотите свою банерную систему - пожалуйста:
    <!--#include virtual="../cgi-bin/ranban.cgi" -->
    Можно что ни буть и по сложнее
    <!--#config timefmt="%H"-->
    <!--#if expr="DATE_LOCAL>9" --> 
    <script language="JavaScript" src="http://www.baners.com/ban.cgi"> </script>
    <!--#else -->
    <!--#include virtual="/cgi-bin/ranban.cgi" -->
    <!--#endif -->
    То есть понятно после 9 часов дня показываем банера с сайта по JavaScript, а
    с 0 часов свой внутрений скрипт "рандомайзе показ" 
    
    
    HTML Таблицы <table width="90%" border="1" cellspacing="0" cellpadding="0"
    align="center">
    <TR><TD>
    <!--#include virtual="path/left.shtml" -->
    </TD>
    <TD>
    <!--#include virtual="path/start.shtml" -->
    </TD>
    <TD>
    <!--#include virtual="path/right.shtml" -->
    </TD></TR>
    </table>
    
    left.shtml
    Левая часть сайта здесь мы выводим табличку, с линками по всему сайту. На
    страничке используются заготовленные переменные цветов и что важно полный
    адрес линков с переменной WWW
    
    Цвет бекграунда - COLORBCG
    Цвет заливки 1 - COLORfonA
    Цвет заливки 1 - COLORfonB
    Цвет титров 1 - COLORtitrA
    Цвет титров 2 - COLORtitrB 
    <table border="0" cellpadding="0" cellspacing="0" width="120" align="center">
    <tr><td color="<!--#echo var="COLORfonA" -->">
    <a href="<!--#echo var="WWW" -->/news.shtml">
    <FONT color="<!--#echo var="COLORtitrB" -->">news </FONT></a></td></tr>
    </table>
    А в конце не помешает SSI линк на страничку left_baner.shtml, в которой Ваш
    набор счетчиков.
    <!--#include virtual="left_baner.shtml" -->
    start.shtml
    Здесь может быть большой набор скриптов но мы ограничимся новостийными
    выводами с вариациями.
    По умолчанию стартует скрипт новостийных заглавий, а при нажатии на заглавие
    вы попадаете на вывод новостийного блока или конкретной старой новости
    
    <!--#ifexpr="$QUERY_STRING=/new/" -->
    <!--#include virtual= "path/news.cgi?$QUERY_STRING&COLORfonA=$COLORfonA&COLORtitrA=$COLORtitrA"
    -->
    <!--#elifexpr="$QUERY_STRING=/old/" -->
    <!--#include virtual="path/old_news.cgi?$QUERY_STRING" -->
    <!--#else -->
    <!--#include virtual="path/zaglavie_news.cgi?$QUERY_STRING" -->
    <!--#endif --> 
    В первом "инклюде" если Вы заметили мы передаем наши переменные среды SSI в
    среду CGI, то есть наши цветовые переменные передаются в CGI скрипт.
    Вот здесь как раз важно чтобы в переменной не было знака # а то ничего не
    получится
    
    right.shtml
    Здесь тоже может быть большой набор скриптов, меню, линков в зависимости от
    различных "переменных окружения" ("environment variables").
    Например HTTP_COOKIE
    
    <!--#ifexpr="$HTTP_COOKIE=/Administrator/" -->
    <!--#include virtual= "path/admin.cgi?$QUERY_STRING&COLORfonA=$COLORfonA&COLORtitrA=$COLORtitrA"
    -->
    <!--#endif -->
    То есть в данном случае только лично у Вас будет выводится скрипт admin.cgi
    с широкими возможностями по администрированию странички.
    И только по тому что у Вас в COOKIE прописано святое слово Administrator
    Хотя Вы понимаете что для таких случаев лучше, что-то типа такого
    kmWmtfSWNlFnLM
    Как закодировать и записать в ПЕЧЕНЬЕ такой пароль, это разговор не для этой
    темы 
    
    
    Низ сайта Как и в предыдущих вариантах создается файл botom.shtml без html,
    head, body.
    Внутри может быть тэги копирайтов , банеров, элементы своей статистики типа:
    <!--#includevirtual="stat.cgi?file=$DOCUMENT_NAME&name=$NamePage&$QUERY_STRING"-->
    
    
    Хороший совет:
    Не забывайте в дочерних файлах дописывать SSI-команду -
    <!--#config errmsg="[ERROR $NamePage]"-->
    А то надпись "[an error occurred while processing this directive]" очень уж
    не красива
    Я желаю что бы у Вас никогда не появлялось таких надписей!
    Вот и все. 
    Автор:  Александр
    Ковальский
    Источник: 
    http://rusdoc.kulichki.ru