Модуль Apache mod_include
| Описание: | HTML-документы, обрабатываемые сервером (Server Side Includes) |
|---|---|
| Статус: | Базовый |
| Идентификатор модуля: | include_module |
| Исходный файл: | mod_include.c |
Краткое описание
Этот модуль предоставляет фильтр, который обрабатывает файлы перед отправкой клиенту. Обработка управляется специально отформатированными комментариями SGML, называемыми элементами. Эти элементы позволяют задавать условный текст, включать другие файлы или программы, а также устанавливать и выводить переменные окружения.
Включение Server-Side Includes
Server Side Includes реализованы с помощью INCLUDES фильтра. Если документам, содержащим директивы server-side include, присвоено расширение .shtml, следующие директивы заставят Apache обрабатывать их и присваивать полученному документу MIME-тип text/html:
AddType text/html .shtml AddOutputFilter INCLUDES .shtml
Для каталогов, содержащих файлы shtml (обычно в разделе <Directory>, но эту директиву также можно использовать в файлах .htaccess, если задано AllowOverride Options), необходимо указать следующую директиву:
Options +Includes
Для обратной совместимости обработчик server-parsed также активирует фильтр INCLUDES. Кроме того, Apache активирует фильтр INCLUDES для любого документа с MIME-типом text/x-server-parsed-html или text/x-server-parsed-html3 (при этом результирующий вывод будет иметь MIME-тип text/html).
Дополнительные сведения см. в нашем руководстве по Server Side Includes.
PATH_INFO с Server Side Includes
По умолчанию для файлов, обрабатываемых с помощью server-side includes, больше не принимаются запросы с PATH_INFO (дополнительной информацией в конце пути). Для настройки сервера на прием запросов с AcceptPathInfo можно использовать директиву PATH_INFO.
Доступные элементы
Документ разбирается как HTML-документ со специальными командами, встроенными в комментарии SGML. Команда имеет следующий синтаксис:
<!--#element attribute=value attribute=value ... -->
Значение часто заключается в двойные кавычки, но также можно использовать одинарные кавычки (') и обратные кавычки (`). Многие команды допускают только одну пару атрибут-значение. Обратите внимание: перед завершителем комментария (-->) следует ставить пробел, чтобы он не считался частью токена SSI. Обратите внимание, что начальный <!--# — это один токен, и он не может содержать пробелы.
Допустимые элементы перечислены в следующей таблице:
| Элемент | Описание |
|---|---|
comment | комментарий SSI |
config | настройка форматов вывода |
echo | вывод переменных |
exec | выполнение внешних программ |
fsize | вывод размера файла |
flastmod | вывод времени последнего изменения файла |
include | включение файла |
printenv | вывод всех доступных переменных |
set | установка значения переменной |
Элементы SSI могут определяться модулями, отличными от mod_include. В частности, элемент exec предоставляется модулем mod_cgi и доступен только в том случае, если этот модуль загружен.
Элемент comment
Эта команда ничего не выводит. Она используется только для добавления комментариев в файл. Эти комментарии не выводятся.
<!--#comment Blah Blah Blah --> or <!--#comment text="Blah Blah Blah" -->
Элемент config
Эта команда управляет различными аспектами разбора. Допустимые атрибуты:
-
echomsg(Apache 2.1 и более поздние версии) -
Значение — это сообщение, отправляемое клиенту, если элемент
echoпытается вывести неопределенную переменную. Оно имеет приоритет над любыми директивамиSSIUndefinedEcho.<!--#config echomsg="[Value Undefined]" -->
errmsg-
Значение — это сообщение, отправляемое клиенту при возникновении ошибки во время разбора документа. Оно имеет приоритет над любыми директивами
SSIErrorMsg.<!--#config errmsg="[Oops, something broke.]" -->
sizefmt-
Значение задает формат отображения размера файла. Допустимые значения:
bytesдля вывода размера в байтах илиabbrevдля вывода размера в КБ или МБ, в зависимости от величины. Например, размер 1024 байта будет выведен как «1K».<!--#config sizefmt="abbrev" -->
timefmt-
Значение — строка, используемая библиотечной функцией
strftime(3)при выводе дат.<!--#config timefmt=""%R, %B %d, %Y"" -->
Элемент echo
Эта команда выводит одну из переменных include, определенных ниже. Если переменная не задана, результат определяется директивой SSIUndefinedEcho. Все выводимые даты форматируются согласно текущим настройкам timefmt.
Атрибуты:
var- Значение — имя переменной для вывода.
decoding-
Указывает, следует ли Apache удалять из переменной кодирование перед ее дальнейшей обработкой. По умолчанию используется
none, то есть декодирование не выполняется. Если задано значениеurl, будет выполнено декодирование URL (также известное как %-кодирование; подходит для использования в URL, например в ссылках). Если задано значениеurlencoded, будет удалено кодирование, совместимое с application/x-www-form-urlencoded (используемое в строках запроса). Если задано значениеbase64, будет выполнено декодирование base64, а еслиentity— удалено кодирование HTML-сущностей. Декодирование выполняется до любого дальнейшего кодирования переменной. Можно удалять несколько типов кодирования, указав их через запятую. Настройка декодирования остается в силе до следующего атрибута декодирования или до конца элемента.Чтобы атрибут
decodingдействовал, он должен предшествовать соответствующему атрибутуvar. encoding-
Указывает, как Apache должен кодировать специальные символы переменной перед ее выводом. Если задано значение
none, кодирование не выполняется. Если задано значениеurl, будет выполнено кодирование URL (также известное как %-кодирование; подходит для использования в URL, например в ссылках). Если задано значениеurlencoded, вместо этого будет выполнено кодирование, совместимое с application/x-www-form-urlencoded, которое следует использовать со строками запроса. Если задано значениеbase64, будет выполнено кодирование base64. В начале элементаechoпо умолчанию используется значениеentity, что приводит к кодированию сущностей (подходящему для контекста блочного HTML-элемента, например абзаца текста). Это значение можно изменить, добавив атрибутencoding; он будет действовать до следующего атрибутаencodingили до конца элемента — в зависимости от того, что наступит раньше.Чтобы атрибут
encodingдействовал, он должен предшествовать соответствующему атрибутуvar.Во избежание проблем с межсайтовым скриптингом всегда кодируйте данные, предоставленные пользователем.Пример
<!--#echo encoding="entity" var="QUERY_STRING" -->
Элемент exec
Команда exec выполняет заданную команду оболочки или сценарий CGI. Для ее работы в сервере должен присутствовать mod_cgi. Если задано Options IncludesNOEXEC, эта команда полностью отключена. Допустимые атрибуты:
cgi-
Значение задает путь URL (%-кодированный) к сценарию CGI. Если путь не начинается с косой черты (/), он считается относительным к текущему документу. Документ, указанный этим путем, запускается как сценарий CGI, даже если сервер обычно не распознает его как таковой. Однако каталог, содержащий сценарий, должен быть настроен для выполнения сценариев CGI (с помощью
ScriptAliasилиOptionsExecCGI).Сценарию CGI передаются
PATH_INFOи строка запроса (QUERY_STRING) исходного запроса клиента; их нельзя указать в пути URL. Помимо стандартного окружения CGI, сценарию будут доступны переменные include.Пример
<!--#exec cgi="/cgi-bin/example.cgi" -->
Если сценарий возвращает заголовок
Location:вместо вывода, он будет преобразован в HTML-ссылку.Элемент
include virtualследует использовать вместоexec cgi. В частности, если необходимо передать программе CGI дополнительные аргументы с помощью строки запроса, это невозможно сделать с помощьюexec cgi, но можно с помощьюinclude virtual, как показано здесь:<!--#include virtual="/cgi-bin/example.cgi?argument=value" -->
cmd-
Сервер выполнит указанную строку с помощью
/bin/sh. Помимо обычного набора переменных CGI, команде доступны переменные include.Почти всегда предпочтительнее использовать
#include virtual, а не#exec cgiили#exec cmd. Первый вариант (#include virtual) использует стандартный механизм подзапросов Apache для включения файлов или сценариев. Он гораздо лучше протестирован и поддерживается.Кроме того, на некоторых платформах, например Win32, а также в Unix при использовании suexec, нельзя передавать аргументы команде в директиве
execили иным образом включать в команду пробелы. Поэтому приведенный ниже пример будет работать в Unix при конфигурации без suexec, но не даст нужного результата в Win32 или при запуске suexec:<!--#exec cmd="perl /path/to/perlscript arg1 arg2" -->
Элемент fsize
Эта команда выводит размер указанного файла согласно формату sizefmt. Атрибуты:
file- Значение — путь относительно каталога, содержащего разбираемый текущий документ. Значение
This file is <!--#fsize file="mod_include.html" --> bytes.
fileне может начинаться с косой черты (/) и не может содержать../, указывающее на файл выше текущего каталога или за пределами корня документов. Такая попытка приведет к сообщению об ошибке:The given path was above the root path. virtual- Значение — путь URL (%-кодированный). Если он не начинается с косой черты (/), он считается относительным к текущему документу. Обратите внимание: выводится не размер вывода CGI, а размер самого сценария CGI.
This file is <!--#fsize virtual="/docs/mod/mod_include.html" --> bytes.
Обратите внимание, что во многих случаях эти два варианта означают одно и то же. Однако атрибут file не учитывает псевдонимы URL-пространства.
Элемент flastmod
Эта команда выводит дату последнего изменения указанного файла согласно формату timefmt. Атрибуты совпадают с атрибутами команды fsize.
Элемент include
Эта команда вставляет текст другого документа или файла в разбираемый файл. На включаемые файлы распространяются обычные правила контроля доступа. Если для каталога, содержащего разбираемый файл, задан параметр Options IncludesNOEXEC, будут включаться только документы с текстовым MIME-типом (text/plain, text/html и т. д.). В противном случае сценарии CGI запускаются обычным образом по полному URL, указанному в команде, включая строку запроса.
Атрибут задает расположение документа; в элементе include он может встречаться несколько раз. Для каждого указанного атрибута команда include по очереди выполняет включение. Допустимые атрибуты:
file- Значение — путь относительно каталога, содержащего разбираемый текущий документ. Он не может содержать
../и не может быть абсолютным путем. Поэтому нельзя включать файлы за пределами корня документов или расположенные выше текущего документа в структуре каталогов. Вместо этого атрибута всегда следует использоватьvirtual. virtual-
Значение — путь URL (%-кодированный). URL не может содержать схему или имя хоста, а только путь и необязательную строку запроса. Если он не начинается с косой черты (/), то считается относительным к текущему документу.
Из атрибута формируется URL, а в разобранный вывод включается ответ сервера, который был бы возвращен при обращении клиента по этому URL. Таким образом, включаемые файлы могут быть вложенными.
Если указанный URL ведет к программе CGI, программа будет выполнена, а ее вывод вставлен вместо директивы в разбираемом файле. В URL CGI можно указать строку запроса:
<!--#include virtual="/cgi-bin/example.cgi?argument=value" -->
Для включения вывода программ CGI в HTML-документ следует использовать
include virtualвместоexec cgi.Если директива
KeptBodySizeправильно настроена и применима к включаемому файлу, попытки отправить запросы POST к содержащему директиву HTML-документу будут передаваться подзапросам также как запросы POST. Без этой директивы все подзапросы обрабатываются как запросы GET. onerror-
Значение — путь URL (%-кодированный), который отображается в случае неудачной предыдущей попытки включить файл или виртуальный атрибут. Чтобы атрибут действовал, его необходимо указать после атрибутов file или virtual, к которым он применяется. Если попытка включить путь onerror завершится неудачей или атрибут onerror не задан, будет включено стандартное сообщение об ошибке.
# Simple example <!--#include virtual="/not-exist.html" onerror="/error.html" -->
# Dedicated onerror paths <!--#include virtual="/path-a.html" onerror="/error-a.html" virtual="/path-b.html" onerror="/error-b.html" -->
Элемент printenv
Эта команда выводит обычный текстовый список всех существующих переменных и их значений. Перед выводом специальные символы кодируются как сущности (подробности см. в описании элемента echo). Атрибутов нет.
Пример
<pre> <!--#printenv --> </pre>
Элемент set
Эта команда задает значение переменной. Атрибуты:
var- Имя переменной, которой нужно присвоить значение.
value- Значение, присваиваемое переменной.
decoding-
Указывает, следует ли Apache удалять из переменной кодирование перед ее дальнейшей обработкой. По умолчанию используется
none, то есть декодирование не выполняется. Если задано значениеurl,urlencoded,base64илиentity, будет выполнено соответственно декодирование URL, декодирование application/x-www-form-urlencoded, декодирование base64 или декодирование HTML-сущностей. Несколько типов декодирования можно указать через запятую. Настройка декодирования остается в силе до следующего атрибута декодирования или до конца элемента. Чтобы атрибутdecodingдействовал, он должен предшествовать соответствующему атрибутуvar. encoding-
Указывает, как Apache должен кодировать специальные символы переменной перед ее присваиванием. По умолчанию используется
none, то есть кодирование не выполняется. Если задано значениеurl,urlencoding,base64илиentity, будет выполнено соответственно кодирование URL, кодирование application/x-www-form-urlencoded, кодирование base64 или кодирование HTML-сущностей. Несколько типов кодирования можно указать через запятую. Настройка кодирования остается в силе до следующего атрибута кодирования или до конца элемента. Чтобы атрибутencodingдействовал, он должен предшествовать соответствующему атрибутуvar. Кодирование применяется после удаления всех типов кодирования при декодировании.
Пример
<!--#set var="category" value="help" -->
Переменные include
Помимо переменных стандартного окружения CGI, эти переменные доступны команде echo, элементам if и elif, а также любой программе, вызванной документом.
DATE_GMT- Текущая дата по среднему времени по Гринвичу.
DATE_LOCAL- Текущая дата в местном часовом поясе.
DOCUMENT_ARGS- Эта переменная содержит строку запроса активного документа SSI или пустую строку, если строка запроса отсутствует. Для подзапросов, вызванных директивой SSI
include,QUERY_STRINGбудет содержать строку запроса подзапроса, аDOCUMENT_ARGS— строку запроса документа SSI. (Доступно в Apache HTTP Server 2.4.19 и более поздних версиях.) DOCUMENT_NAME- Имя файла (без каталогов) документа, запрошенного пользователем.
DOCUMENT_PATH_INFO- Дополнительная информация в конце пути. Дополнительные сведения о
PATH_INFOсм. в директивеAcceptPathInfo. DOCUMENT_URI- Путь URL документа, запрошенного пользователем (%-декодированный). Обратите внимание: при вложенных включаемых файлах это не URL текущего документа. Также обратите внимание: если URL изменяется внутри сервера (например, директивой
aliasилиdirectoryindex), будет показан измененный URL. LAST_MODIFIED- Дата последнего изменения документа, запрошенного пользователем.
QUERY_STRING_UNESCAPED- Если запрос активного документа SSI содержит строку запроса, эта переменная содержит строку запроса (%-декодированную), которая экранирована для использования в оболочке (перед специальными символами, например
&и т. д., ставятся обратные косые черты). Если строка запроса отсутствует, переменная не задается. Если экранирование для оболочки не требуется, используйтеDOCUMENT_ARGS. USER_NAME- Имя пользователя — владельца файла.
Подстановка переменных
В большинстве случаев подстановка переменных выполняется внутри строк в кавычках там, где они могут использоваться как аргумент директивы SSI. Сюда входят директивы config, exec, flastmod, fsize, include, echo и set. Если для SSILegacyExprParser задано значение on, подстановка также выполняется в аргументах условных операторов. Чтобы вставить в строку буквальный знак доллара, используйте экранирование обратной косой чертой:
<!--#set var="cur" value="\$test" -->
Если ссылку на переменную нужно подставить в середину последовательности символов, которая иначе могла бы считаться допустимым идентификатором, ее можно уточнить, заключив ссылку в фигурные скобки, как при подстановке в оболочке:
<!--#set var="Zed" value="${REMOTE_HOST}_${REQUEST_METHOD}" -->В результате переменной Zed будет присвоено значение «X_Y», если REMOTE_HOST имеет значение «X», а REQUEST_METHOD — «Y».
Элементы управления потоком выполнения
Основные элементы управления потоком выполнения:
<!--#if expr="test_condition" --> <!--#elif expr="test_condition" --> <!--#else --> <!--#endif -->
Элемент if работает подобно оператору if в языке программирования. Условие проверяется, и если оно истинно, текст до следующего элемента elif, else или endif включается в выходной поток.
Операторы elif или else используются для добавления текста в выходной поток, если исходное test_condition было ложным. Эти элементы необязательны.
Элемент endif завершает элемент if и является обязательным.
test_condition — это логическое выражение, синтаксис которого соответствует ap_expr. Синтаксис можно изменить для совместимости с Apache HTTPD 2.2.x с помощью SSILegacyExprParser.
Переменные SSI, заданные элементом var, экспортируются в окружение запроса и доступны с помощью функции reqenv. Для краткости внутри mod_include также доступно имя функции v.
В приведенном ниже примере будет выведено «из локальной сети», если IP-адрес клиента принадлежит подсети 10.0.0.0/8.
<!--#if expr='-R "10.0.0.0/8"' --> from local net <!--#else --> from somewhere else <!--#endif -->
В приведенном ниже примере будет выведено «foo is bar», если переменной foo присвоено значение «bar».
<!--#if expr='v("foo") = "bar"' -->
foo is bar
<!--#endif -->Справочная документация
См. также: Выражения в Apache HTTP Server — полное описание и примеры. Ограниченные функции недоступны внутри mod_include
Синтаксис устаревших выражений
В этом разделе описан синтаксис элемента #if expr, если для SSILegacyExprParser задано значение on.
string- истина, если string не пустая
-A string-
истина, если доступ к URL, представленному строкой, разрешен конфигурацией, в противном случае — ложь. Это полезно, когда нужно скрыть содержимое страницы от пользователей, не имеющих права просматривать URL, например ссылку на этот URL. Обратите внимание: проверяется только наличие разрешения на доступ, а не существование URL.
Пример
<!--#if expr="-A /private" --> Click <a href="/private">here</a> to access private information. <!--#endif -->
string1 = string2
string1 == string2
string1 != string2-
Сравнение string1 и string2. Если string2 имеет вид
/string2/, она рассматривается как регулярное выражение. Регулярные выражения реализованы движком PCRE и имеют тот же синтаксис, что и в perl 5. Обратите внимание:==— это просто псевдоним=, работающий точно так же.При положительном совпадении (
=или==) можно захватывать сгруппированные части регулярного выражения. Захваченные части сохраняются в специальных переменных$1..$9. Вся строка, совпавшая с регулярным выражением, сохраняется в специальной переменной$0Пример
<!--#if expr="$QUERY_STRING = /^sid=([a-zA-Z0-9]+)/" --> <!--#set var="session" value="$1" --> <!--#endif -->
string1 < string2
string1 <= string2
string1 > string2
string1 >= string2- Сравнение string1 и string2. Обратите внимание: строки сравниваются буквально (с использованием
strcmp(3)). Поэтому строка «100» меньше строки «20». ( test_condition )- истина, если test_condition истинно
! test_condition- истина, если test_condition ложно
test_condition1 && test_condition2- истина, если оба условия test_condition1 и test_condition2 истинны
test_condition1 || test_condition2- истина, если истинно хотя бы одно из условий test_condition1 или test_condition2
«=» и «!=» имеют более высокий приоритет, чем «&&» и «||». Наивысший приоритет у «!». Таким образом, следующие выражения эквивалентны:
<!--#if expr="$a = test1 && $b = test2" --> <!--#if expr="($a = test1) && ($b = test2)" -->
Логические операторы && и || имеют одинаковый приоритет. Поэтому, если нужно повысить приоритет такого оператора, следует использовать скобки.
Все, что не распознано как переменная или оператор, считается строкой. Строки также можно заключать в кавычки: 'string'. Некавыченные строки не могут содержать пробелы (пробелы и табуляции), поскольку они используются для разделения таких токенов, как переменные. Если подряд указано несколько строк, они объединяются пробелами. Например,
string1 string2 дает string1 string2
а
'string1 string2' дает string1 string2.
Оптимизация логических выражений
Если выражения становятся сложнее и значительно замедляют обработку, можно попробовать оптимизировать их с учетом следующих правил вычисления:
- Выражения вычисляются слева направо
- Для бинарных логических операторов (
&&и||) по возможности применяется короткое замыкание. С учетом приведенного выше правила это означает, чтоmod_includeсначала вычисляет левое выражение. Если результат слева достаточен для определения итогового результата, обработка прекращается. В противном случае вычисляется правая часть, а итоговый результат определяется по значениям левой и правой частей. - Короткое замыкание отключается, если необходимо обработать регулярные выражения. Их нужно вычислить, чтобы заполнить переменные обратных ссылок (
$1..$9).
Чтобы узнать, как обрабатывается конкретное выражение, можно перекомпилировать mod_include с параметром компилятора -DDEBUG_INCLUDE. Для каждого разобранного выражения в вывод, отправляемый клиенту, добавляется информация о токенизации, дерево разбора и сведения о ходе вычисления.
Экранирование косых черт в строках регулярных выражений
Все косые черты, которые не должны выступать разделителями регулярного выражения, необходимо экранировать. Это необходимо независимо от их значения для движка регулярных выражений.
Директива SSIEndTag
| Описание: | Строка, завершающая элемент include |
|---|---|
| Синтаксис: | SSIEndTag tag |
| По умолчанию: | SSIEndTag "-->" |
| Контекст: | конфигурация сервера, виртуальный хост |
| Статус: | Базовый |
| Модуль: | mod_include |
Эта директива изменяет строку, которую mod_include ищет для обозначения конца элемента include.
SSIEndTag "%>"
См. также
Директива SSIErrorMsg
| Описание: | Сообщение об ошибке, отображаемое при ошибке SSI |
|---|---|
| Синтаксис: | SSIErrorMsg message |
| По умолчанию: | SSIErrorMsg "[an error occurred while processing this directive]" |
| Контекст: | конфигурация сервера, виртуальный хост, каталог, .htaccess |
| Переопределение: | Все |
| Статус: | Базовый |
| Модуль: | mod_include |
Директива SSIErrorMsg изменяет сообщение об ошибке, отображаемое при возникновении ошибки в mod_include. Для рабочих серверов можно изменить сообщение об ошибке по умолчанию на "<!-- Error -->", чтобы оно не отображалось пользователю.
Эта директива имеет тот же эффект, что и элемент <!--#config errmsg=message -->.
SSIErrorMsg "<!-- Error -->"
Директива SSIETag
| Описание: | Управляет генерацией ETag сервером. |
|---|---|
| Синтаксис: | SSIETag on|off |
| По умолчанию: | SSIETag off |
| Контекст: | каталог, .htaccess |
| Статус: | Базовый |
| Модуль: | mod_include |
| Совместимость: | Доступно начиная с версии 2.2.15. |
В обычных условиях файл, обработанный фильтром mod_include, может содержать элементы, которые генерируются динамически или могли измениться независимо от исходного файла. Поэтому по умолчанию серверу передается запрос не генерировать заголовок ETag для ответа: в заметки запроса добавляется no-etag.
Директива SSIETag отключает это поведение и позволяет серверу генерировать заголовок ETag. Это можно использовать для включения кэширования вывода. Обратите внимание: внутренний сервер или генератор динамического содержимого может создать собственный ETag, игнорируя no-etag, и этот ETag будет передан модулем mod_include независимо от значения этого параметра. Директива SSIETag может принимать следующие значения:
off-
В заметки запроса будет добавлено
no-etag, и серверу будет передан запрос не генерировать ETag. Если сервер проигнорирует значениеno-etagи все равно сгенерирует ETag, этот ETag будет сохранен. on- Существующие ETag сохраняются, а ETag, сгенерированные сервером, передаются в ответе.
Директива SSILastModified
| Описание: | Управляет тем, генерируются ли сервером заголовки Last-Modified. |
|---|---|
| Синтаксис: | SSILastModified on|off |
| Значение по умолчанию: | SSILastModified off |
| Контекст: | directory, .htaccess |
| Статус: | Базовый |
| Модуль: | mod_include |
| Совместимость: | Доступна начиная с версии 2.2.15. |
В обычных условиях файл, обработанный с помощью mod_include, может содержать элементы, которые генерируются динамически или могут изменяться независимо от исходного файла. В результате по умолчанию заголовок Last-Modified удаляется из ответа.
Директива SSILastModified переопределяет это поведение и позволяет учитывать заголовок Last-Modified, если он уже присутствует, либо устанавливать его, если заголовок отсутствует. Это можно использовать для включения кэширования вывода. SSILastModified может принимать следующие значения:
off- Заголовок
Last-Modifiedбудет удаляться из ответов, если только директиваXBitHackне задана какfull, как описано ниже. on- Заголовок
Last-Modifiedбудет учитываться, если он уже присутствует в ответе, и добавляться в ответ, если ответ содержит файл, а заголовок отсутствует. ДирективаSSILastModifiedимеет приоритет надXBitHack.
Директива SSILegacyExprParser
| Описание: | Включает режим совместимости для условных выражений. |
|---|---|
| Синтаксис: | SSILegacyExprParser on|off |
| Значение по умолчанию: | SSILegacyExprParser off |
| Контекст: | directory, .htaccess |
| Статус: | Базовый |
| Модуль: | mod_include |
| Совместимость: | Доступна начиная с версии 2.3.13. |
Начиная с версии 2.3.13, mod_include перешёл на новый синтаксис ap_expr для условных выражений в управляющих конструкциях #if. Эта директива позволяет переключиться на старый синтаксис, совместимый с Apache HTTPD версии 2.2.x и более ранними версиями.
Директива SSIStartTag
| Описание: | Строка, начинающая элемент include |
|---|---|
| Синтаксис: | SSIStartTag tag |
| Значение по умолчанию: | SSIStartTag "<!--#" |
| Контекст: | конфигурация сервера, виртуальный хост |
| Статус: | Базовый |
| Модуль: | mod_include |
Эта директива изменяет строку, которую mod_include ищет для обозначения обрабатываемого элемента include.
Этот параметр может быть полезен, если вывод файла обрабатывают два сервера, каждый из которых выполняет разные команды (возможно, в разное время).
SSIStartTag "<%" SSIEndTag "%>"
Пример выше, в котором также указан соответствующий SSIEndTag, позволит использовать директивы SSI, как показано в следующем примере:
Директивы SSI с альтернативными тегами начала и окончания
<%printenv %>
См. также
Директива SSITimeFormat
| Описание: | Настраивает формат отображения строк с датами |
|---|---|
| Синтаксис: | SSITimeFormat formatstring |
| Значение по умолчанию: | SSITimeFormat "%A, %d-%b-%Y %H:%M:%S %Z" |
| Контекст: | конфигурация сервера, виртуальный хост, directory, .htaccess |
| Переопределение: | Все |
| Статус: | Базовый |
| Модуль: | mod_include |
Эта директива изменяет формат отображения строк с датами при выводе переменных окружения DATE. formatstring задаётся так же, как strftime(3) из стандартной библиотеки C.
Эта директива имеет тот же эффект, что и элемент <!--#config timefmt=formatstring -->.
SSITimeFormat "%R, %B %d, %Y"
Приведённая выше директива приведёт к отображению времени в формате «22:26, June 14, 2002».
Директива SSIUndefinedEcho
| Описание: | Строка, отображаемая при выводе неустановленной переменной |
|---|---|
| Синтаксис: | SSIUndefinedEcho string |
| Значение по умолчанию: | SSIUndefinedEcho "(none)" |
| Контекст: | конфигурация сервера, виртуальный хост, directory, .htaccess |
| Переопределение: | Все |
| Статус: | Базовый |
| Модуль: | mod_include |
Эта директива изменяет строку, которую mod_include отображает, когда переменная не установлена и выполняется её «вывод».
SSIUndefinedEcho "<!-- undef -->"
Директива XBitHack
| Описание: | Обрабатывает директивы SSI в файлах с установленным битом выполнения |
|---|---|
| Синтаксис: | XBitHack on|off|full |
| Значение по умолчанию: | XBitHack off |
| Контекст: | конфигурация сервера, виртуальный хост, directory, .htaccess |
| Переопределение: | Параметры |
| Статус: | Базовый |
| Модуль: | mod_include |
Директива XBitHack управляет обработкой обычных HTML-документов. Эта директива действует только на файлы, связанные с MIME-типом text/html. XBitHack может принимать следующие значения:
off- Исполняемые файлы не обрабатываются особым образом.
on- Любой файл
text/htmlс установленным битом выполнения для пользователя будет обрабатываться как HTML-документ, анализируемый сервером. full- Как и
on, но также проверяется бит выполнения для группы. Если он установлен, датаLast-modifiedвозвращаемого файла устанавливается равной времени последнего изменения файла. Если он не установлен, дата последнего изменения не отправляется. Установка этого бита позволяет клиентам и прокси-серверам кэшировать результат запроса.Примечание
Не следует использовать полный вариант, если только вы не гарантируете, что бит выполнения для группы снят у каждого SSI-скрипта, который может
#includeCGI или иным образом выдавать разные результаты при каждом обращении (либо потенциально изменять их при последующих запросах).Директива
SSILastModifiedимеет приоритет над директивойXBitHack, когдаSSILastModifiedустановлено вon.
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_include.html