SSI: восстание из мёртвых
Главная → Статьи → SSI: восстание из мёртвых
SSI или Server Side Includes ничто иное, как технология серверных включений. Эта технология предоставляет очень удобный способ включения инфомации из различных источников на вашу страницу. Своим существованием она обязана модулю mod_include.
Как это включается...
Чтобы включить этот модуль, в конфигурационный файл httpd.conf Apache нужно включить указание обработки файлов сервером:
AddType text/html .shtml AddHandler server-parsed .shtml
Как правило, а может это так и есть, данный файл расположен по адресу /etc/httpd/httpd.conf если вы работаете под Linux или путь_к_серверу/conf/httpd.conf под Windows. Но помните, из правил бывают и исключения.
Отмечу такую особенность, что на модуль mod_include еще ссылаются mod_cgi, mod_expires.
Еще желательно добавить указание разрешения обрабатывать файлы в директории по умолчанию.
<Directory /> Options Indexes Includes FollowSymLinks AllowOverride None </Directory>
Можно слегка защититься указав директиву IncludesNOEXEC:
<Directory /> Options Indexes IncludesNOEXEC FollowSymLinks AllowOverride None </Directory>
Если вы хотите использовать файл .htaccess для включения парсинга, то в нем нужно указать:
Options +Includes
И не забыть про разрешение обрабатывать файл .htaccess:
<Directory /> Options Indexes FollowSymLinks AllowOverride All </Directory>
Есть еще один оригинальный метод включения SSI обработки - это директива XBitHack, установка её в on приводит к тому, что все файлы имеющие флаг «выполняемый», будут обрабатываться:
XBitHack on
Для присвоения такого флага для файлов нужно дать команду (при работе в Unix-системах)
$/home/phil/exp> chmod +x pagename.html
Известно, что в конфигурации по умолчанию Apache отдает SSI страницу без даты ее последней модификации, потому что расчет её достаточно сложен. Естественно это приводит к некэшируемости страницы и, за счет этого, увеличению расходов по передаче трафика. Проблема кэширования страниц стоит уже давно, тут надо строго определиться, нужно ли вам её кэшировать или нет. Если на странице представлена динамичная информация, то кэшировать не стоит, иначе придется призадуматься. Пока вы ломаете голову, я вернусь к решению проблемы. Тут есть два пути:
- Использовать XBitHack Full запись в конфигурации. Это приведет к тому, что дата последней модификации будет установлена по дате запрашиваемого файла. Например, ежели запрошен файл projects.shtml, а он включает в себя cms.shtml и profiler.shtml, то дата будет отправлена по файлу projects.shtml.
- Использовать директивы модуля mod_expires, которые указывают браузеру и прокси-серверам возможность кэширования страницы.
В Apache 2.x появилась возможность применения фильтров:
AddType text/html .html AddOutputFilter INCLUDES .html .inc .shtml
Азы
Все начинается с элементарных конструкций, называемых директивами. Общий вид:
<!--#element attribute=value attribute=value ... -->
Внешне это выглядит как обычный HTML комментарий, поэтому если ваш сервер не обрабатыет SSI-страницы, то в браузер не выводится никаких ошибок, по крайней мере их просто не видно, но в коде страницы они все равно присутствуют. В случае, когда SSI уже работает, директивы заменяются результами.
element - элемент, команда указывающая на действие
attribute - атрибут команды
value - значение атрибута
Значение атрибута часто бывает заключено в двойные кавычки. Многие команды разрешают только одну пару атрибут="значение". Существует замечание относительно окончания команды `-->`, оно должно обязательно отделяться пробелом от выражения, иначе может быть воспринято как часть выражения или, к примеру, значения атрибута.
Рассмотрим базовые директивы:
<!--#include file="my_included_file.inc" -->
Такая конструкция позволяет просто включить файл my_included_file.inc не производя над ним никаких действий. В качестве такого файла может быть статичная веб-страница.
Значение атрибута file - это путь относительно директории, содержащей вызываемый документ. Он не может содержать ../ или абсолютный путь, то есть находящейся в той же папке, что и вызывающий файл.
<html> <head> <title> Код программы </title> </head> <body> <pre> <!--#include file="programma.c" --> </pre> </body> </html>
В этом примере отражена попытка вставить на имеющуюся страничку код программы, который берется из файла programma.c
Рассмотрим другой способ включения содержимого:
<!--#include virtual="my_included_file.inc" -->
Отличие этого способа от предыдущего в том, что в качестве my_included_file.inc может быть включен файл из любой папки, путь к которому может быть относительным или абсолютным. Как душе будет угодно. А еще это может быть другой SSI-файл, а может быть скрипт, например написанный на языке Perl:
<!--#include virtual="../cgi-bin/counter.pl" -->
А можно вызвать скрипт с параметрами, вот так:
<!--#include virtual="/cgi-bin/authors.pl?author=Pushkin" -->
А теперь рассмотрим другие директивы. Их может и немного, но они легки в освоении и порой могут просто решить часто возникающие задачи.
- config
- Данный элемент определяет различные параметры настройки SSI
- errmsg
- изменяет стандартное собщение об ошибке на введенное пользователем.
<!--#config errmsg="Ой. Ошибочка тут небольшая. Простите нас, пожалуйста, <a href=mailto:webmaster@yourhost.domain>напишите</a> администратору." -->
- sizefmt
- Управляет отображением размера файла.
- bytes в байтах
- abbrev в килобайтах или мегабайтах
<!--#config sizefmt="abbrev" --> Размер прилагаемого прайс-листа: <!--#fsize file="price.zip"-->
- timefmt
- меняет формат вывода даты и времени
Формат Описание Пример %a Аббревиатура названия дня недели Sun %A Полное название дня недели Sunday %b Аббревиатура названия месяца Jan %B Полное название месяца January %d День месяца 01 (не 1) %D Дата в формате "%m/%d/%y" 01/31/90 %e День месяца 1 %H Часы в 24-часовом формате 13 %I Часы в 12-часовом формате 01 %j День года 235 %m Номер месяца 01 %M Минуты 03 %p AM|PM AM %r Время в формате "%I:%M:%S %p" 11:35:46 PM %S Секунды 34 %s Время в секундах с 01.01.1970 957228726 %T Время в формате "%H:%M:%S" 14:05:34 %U Неделя года 49 %w Номер дня недели 5 %y Год в формате ГГ 95 %Y Год в формате ГГГГ 1995 %Z Временная зона MSK
ВНИМАНИЕ! Данная статья не завершена. Будет дописана по мере возможностей.
Реклама:
Комментарии:
e-mail (не публикуется):
комментарий: