SSI (Server Side Includes) — описание, директивы, параметры
Общая информация
Основным, наиболее простым, но в то же время чрезвычайно мощным инструментом поддержки больших наборов документов является SSI (Server-Side Includes - включения на стороне сервера). С помощью SSI можно не только в зависимости от некоторых условий выводить определенные части документа, не только формировать документ из заранее определенных кусочков, но и вставлять результат работы некоторого CGI сценария или программы прямо в документ.
Только используя SSI, появляется возможность удобно, быстро и весьма эффективно изменить внешний вид или обновить систему навигации на узле, имеющем сотни или тысячи документов, причём, это пройдет безболезненно для пользователей узла, т.к. требуется заменить всего несколько файлов, а остальное сделает сервер.
В стандартном дистрибутиве Apache есть модуль mod_include. Начиная с версии 1.2, он имеет расширенное количество директив и называется - XSSI (eXtended SSI). По умолчанию он включен в компиляцию.
Активация механизма Server-Side Includes
Мы предоставляем своим клиентам возможность использовать директивы SSI на тарифных планах «201» и «301», тарифный план «101» позволяет исполнять SSI инструкции только в режиме «NoExec».
Любой документ, у которого будет установлен обработчик "server-parsed" будет сканироваться этим модулем, если включена опция "Includes". При малом количестве документов с SSI, лучше всего в файле httpd.conf (в случае администрирования в автоматическом режиме данные строки уже присутствуют) указать следующее:
AddType text/html .shtml
AddHandler server-parsed .shtml |
и устанавливать у таких файлов расширение .shtml. Если же все или почти все документы будут иметь директивы SSI, то лучше в файле конфигурации указать:
AddHandler server-parsed .html |
Однако стоит помнить, что в этом случае на сервер ляжет дополнительная нагрузка по проверке всех документов вида *.html.
Также, следует включить в опции директории узла параметр Includes:
Практическое использование SSI
Пример 1.
Первым распространенным применением SSI является внедрение в документ некоего динамического куска разметки. Примерами могут служить счетчики посещений, цитаты или баннеры рекламных сетей. В любом случае, будь то строка текста или целая таблица, вставка производится с помощью директивы include, помещаемой в то место, куда должен быть вставлен кусок разметки:
<html> <body> <p>Документ с баннером внизу страницы</p> <!--#include virtual="/cgi-bin/ibanner.pl?web_site" --> </body> </html> |
Программа или сценарий CGI, вставляемая с помощью SSI, ничем не отличается от стандартной CGI программы, за исключением того, что должен выдаваться не целый документ, а только кусок разметки.
Вот текст упомянутого выше сценария:
#!/usr/local/bin/perl $login=$ENV{"QUERY_STRING"}; print "Content-type: text/html\n\n"; ($IP)=($ENV{"REMOTE_ADDR"}=~s/\.//g); srand($$+$IP+time); $seed=int rand(10000000); print "<a href=\"http://www.test.ru/cgi-bin/href/$login?$seed\">\n"; print "<img src=\"http://www.test.ru/cgi-bin/banner/$login?$seed\" width=468 height=60 border=0>\n"; print "</a>\n"; |
Как видно из примера даже во включаемых сценариях необходимо выводить HTTP заголовок.
В результате сканирования нашего простейшего документа пользователю будет возвращен примерно (с точностью до случайной величины) следующий документ:
<html> <body> <p>Документ с баннером внизу страницы</p> <a href="http://www.test.ru/cgi-bin/href/web_site?348593"> <img src="http://www.test.ru/cgi-bin/banner/web_site?348593" width=468 height=60 border=0> </a> </body> </html> |
Пример 2.
Вторым распространенным применением SSI является формирование страницы из шаблона. В простейшем случае - это документ в начало и конец, которого вставляются шапка и подвал:
<html> <body> <head> <title>Test Page</title> </head> <!--#include virtual="/ssi/header.html" --> <h1>Тестовая страница</h1> <p>Некий текст</p> <!--#include virtual="/ssi/global_menu.html" --> <!--#include virtual="/ssi/footer.html" --> </body> </html> |
Вставляемые блоки не обязательно должны быть законченными, например, header.html может заканчиваться тэгом <td>, а global_menu.html или footer.html начинаться с тэга </td>. Таким образом, даже при определённой технической сложности шапки и подвала документа, редактируемый документ выглядит чрезвычайно просто, и его легко редактировать.
В связи со всем вышесказанным можно сделать вывод: желательно смысловую часть документа строить так, чтобы она никак не полагалась на содержимое шапок и подвалов. В этом случае легко можно перейти с табличной организации страниц на последовательную или на слоевую, что существенно повысит эргономику web-сайта.
Список всех директив SSI можно найти на http://httpd.apache.org/docs/1.3/mod/mod_include.html
|