@ Карта сайта News Автора!

Bog BOS: sitelife:  SSI (Server Side Include)

Последнее изменение файла: 2007.06.09
Скопировано с www.bog.pp.ru: 2024.11.21

Bog BOS: sitelife: SSI (Server Side Include)

Назначение

SSI (Server Side Include - включения на стороне сервера) представляет собой механизм включения интерпретируемых сервером команд в тело HTML-документов. Разбор и интерпретация производится "на лету" в момент обращения посетителя за документом. Тех же (и гораздо больших) результатов можно добиться с помощью CGI, но это увеличит нагрузку на сервер (на каждый запрос придется запускать отдельный процесс) и может привести к проблемам с безопасностью. Впрочем, необходимость разбора HTML также увеличивает нагрузку на сервер (но меньше, чем CGI). Команды SSI cgi и exec позволяют запускать произвольные программы аналогично механизму CGI, подвергая риску безопасность сервера, но их выполнение администратор сервера может запретить отдельно. Иногда хостинговая компания запрещает клиентам использовать свои CGI программы, не оставляя выбора. Возможностей SSI достаточно для вставки навигационной панели или условной генерации кода страницы. Для сложных задач рекомендуется использование PHP. CGI имеет смысл использовать в редких случаях (унаследованный софт, права доступа).

Описание дается для http-сервера Apache и Apache 2 (XSSI).

Настройка сервера

Обработка SSI ведется модулем mod_include. Не все документы интерпретируются. Прежде всего необходимо определиться какой суффикс (расширение) будут иметь файлы с SSI-командами. Обычным суффиксом является ".shtml". Необходимо сказать серверу, что файлы с таким суффиксом представляют собой документы на HTML и что их надо интерпретировать:

AddType text/html .shtml
AddHandler server-parsed .shtml

В версии Apache 1.3 данные директивы могут быть на любом уровне - уровне сервера, виртуального хоста или директории/.htaccess. В версии Apache 2 модуль include реализован как выходной фильтр, а не обработчик (для совместимости обработчик server-parsed также задействует фильтр INCLUDES; фильтр INCLUDES также включается для документов типа text/x-server-parsed-html и text/x-server-parsed-html3; результат получает тип text/html; для приёма параметров необходимо позаботиться о AcceptPathInfo):

AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

Можно использовать обычный суффикс ".html", но тогда интерпретироваться будут все документы. Директория, файлы из которой необходимо интерпретировать, также должна иметь опции Includes или IncludesNOEXEC (запрещены команды exec и cgi). Ошибки интерпретации записываются в обычный журнал ошибок.

Директивы настройки сервера Apache 2:

Синтаксис команд

Команды оформляются как SGML-комментарии:
<!--#командаатрибут="значение"} -->
Обратите внимание на отсутствие пробела перед "#" и его наличие перед "-->" (сол, фасол пишется с мягким знаком...).

Внутри строки, заключенной в кавычки в теле директивы SSI, происходит подстановка значения переменной окружения вместо имени переменной, предваренной знаком "$" (аналогично sh). Также можно использовать фигурные скобки.

Команды:

Тестовые условия (если строка2 заключена в слеши, то она интерпретируется как регулярное выражение (PCRE, включая установку локальных переменных $1, ..., $9); "=" и "!=" имеет больший приоритет, чем "&&" и "||"; "!" - еще больший; все, что не является переменной или оператором, рассматривается как строка; строки могут быть заключены в апострофы; если строка содержит пробелы, то она должна быть заключена в апострофы; две строки рядом конкатенируются через пробел):

Например: <!--#if expr="\"$DOCUMENT_URI\" = /.*squid\.html/" -->

Переменные окружения

В дополнение к стандарту CGI устанавливаются следующие переменные окружения:

У меня получается такой список (printenv):

Практика

Использование SSI для стандартного оформления страницы

оформляемая страница SSI.html

<!--#set var="title" value="SSI (Server Side Include)" -->
<!--#include file="zagolovok.html" -->
<!--#include file="menu.html" -->
   ... текст ...
<!--#include file="menu.html" -->
<!--#include file="signature.html" -->

zagolovok.html

<!--#config timefmt="%Y%m%d" -->
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/tr/REC-html40/loose.dtd">
<html lang="ru">
<head>
<title>Bog BOS: sitelife: <!--#echo var="title" --></title>
<style type="text/css">
 ...
</style>
<meta name="Author" content="Sergey E Bogomolov">
<!--#if expr="\"$keywords\" != \"\"" --><meta name="Keywords" content="<!--#echo var="keywords" -->"><!--#endif -->
<meta http-equiv="Content-Type" content="text/html">
</head>
<body  alink="#ff0000" bgcolor="#ffffff" link="#0000ff" text="#000000" vlink="#0000aa">

menu.html

<table border="0" cellpadding="0" cellspacing="0" width="100%">
  <tr>
    <td bgcolor="#0086b2">
      <table>
        <tr bgcolor="#ffffff">
<td><a href="http://www.bog.pp.ru<!--#echo var="DOCUMENT_URI" -->">auto </a></td>
<td><a href="http://koi8.bog.pp.ru<!--#echo var="DOCUMENT_URI" -->">koi </a></td>
  ...
        </tr>
      </table>
    </td>
    <td bgcolor="#0086b2" align="center"><p class="h2">Bog BOS: sitelife:  <!--#if expr="\"$title\" != \"\"" --><!--#echo var="title" --><!--#endif -->
      </p></td>
  ...
  </tr>
</table>
<!--#if expr="\"$menu\" != \"yes\"" -->
<p align="right">Последнее изменение файла: <!--#echo var="LAST_MODIFIED" --></p>
<!--#endif -->
<!--#set var="menu" value="yes" -->

signature.html

<hr>
</body></html>

Ссылки

@ Карта сайта News Автора!

Bog BOS: sitelife:  SSI (Server Side Include)



Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru