Модуль 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, и он будет доступен только в том случае, если этот модуль загружен.
Элемент комментария
Эта команда ничего не выводит. Ее единственная цель — добавление комментариев в файл. Эти комментарии не выводятся.
Этот синтаксис доступен в версии 2.4.21 и более поздних.
<!--#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 байта будет напечатан как «1К».<!--#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. Переменные include будут доступны скрипту дополнительно к стандартной среде CGI.Пример
<!--#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. Переменные include доступны для команды в дополнение к обычному набору переменных CGI.Использование
#include virtualпочти всегда предпочтительнее использования#exec cgiили#exec cmd. Первый метод (#include virtual) использует стандартный механизм подзапросов Apache для включения файлов или скриптов. Он намного лучше протестирован и поддерживается.Кроме того, на некоторых платформах, таких как Win32, и на Unix при использовании suexec, вы не можете передавать аргументы в команду в директиве
execили по-другому включать пробелы в команде. Таким образом, хотя следующее будет работать под конфигурацией без suexec на Unix, оно не даст желаемого результата под 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
Эта команда вставляет текст другого документа или файла в обрабатываемый файл. Любой включаемый файл подчиняется обычным правилам контроля доступа. Если каталог, содержащий обрабатываемый файл, имеет Параметры IncludesNOEXEC установленные, то включаться будут только документы с текстовым MIME-типом (text/plain, text/html и т.д.). В противном случае CGI-скрипты вызываются как обычно с использованием полного URL, указанного в команде, включая любые параметры запроса.
Атрибут определяет расположение документа и может встречаться более одного раза в элементе include; включение выполняется для каждого атрибута, указанного в команде include по очереди. Допустимые атрибуты:
file- Значение — путь, относительный к каталогу, содержащему текущий обрабатываемый документ. Он не может содержать
../, а также не может быть абсолютным путем. Таким образом, вы не можете включать файлы, которые находятся вне корневого каталога документа или выше текущего документа в структуре каталогов. Следует всегда использовать атрибутvirtualвместо этого. virtual-
Значение — (%-кодированный) URL-путь. URL не может содержать схему или имя хоста, только путь и необязательные параметры запроса. Если он не начинается с косой черты (/), то считается относительным к текущему документу.
URL строится из атрибута, и вывод, который сервер вернул бы, если бы клиент обратился по URL, включается в обработанный вывод. Таким образом, файлы могут включаться вложенно.
Если указанный URL — CGI-программа, программа будет выполнена, и её вывод будет вставлен вместо директивы в обрабатываемом файле. Вы можете включить параметры запроса в CGI-URL:
<!--#include virtual="/cgi-bin/example.cgi?argument=value" -->
Следует использовать
include virtualвместоexec cgi, чтобы включить вывод CGI-программ в HTML-документ.Если директива
KeptBodySizeкорректно настроена и допустима для данного включаемого файла, попытки отправки POST-запросов в окружающий HTML-документ будут переданы в подзапросы как POST-запросы. Без этой директивы все подзапросы обрабатываются как GET-запросы. onerror-
Значение — (%-кодированный) URL-путь, который отображается в случае неудачной предыдущей попытки включить файл или виртуальный атрибут. Для эффективности этот атрибут должен быть указан после атрибутов файла или виртуального атрибута, к которым он относится. Если попытка включить путь 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- Информация о хвостовом пути. См. директиву
AcceptPathInfoдля получения дополнительной информации оPATH_INFO. DOCUMENT_URI- (Декодированный) URL-путь документа, запрошенного пользователем. Обратите внимание, что в случае вложенных файлов include это не 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. В качестве сокращения также доступно имя функции v внутри mod_include.
В следующем примере будет выведено "из локальной сети", если 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- true, если строка не пустая
-A string-
true, если URL, представленный строкой, доступен по конфигурации, в противном случае false. Это полезно, когда контент на странице должен быть скрыт от пользователей, у которых нет разрешения на просмотр 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-
Сравнение строки1 со строкой2. Если строка2 имеет вид
/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- Сравнение строки1 со строкой2. Обратите внимание, что строки сравниваются буквально (используя
strcmp(3)). Поэтому строка "100" меньше, чем "20". ( test_condition )- true, если условие_теста истинно
! test_condition- true, если условие_теста ложно
test_condition1 && test_condition2- true, если оба условие_теста1 и условие_теста2 истинны
test_condition1 || test_condition2- true, если либо условие_теста1, либо условие_теста2 истинно
"=" и "!=" связываются сильнее, чем "&&" и "||". "!" связывается сильнее всего. Таким образом, следующие выражения эквивалентны:
<!--#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
| Описание: | Строка, которая завершает элемент включения |
|---|---|
| Синтаксис: | SSIEndTag tag |
| По умолчанию: | SSIEndTag "-->" |
| Контекст: | конфигурация сервера, виртуальный хост |
| Статус: | Базовый |
| Модуль: | mod_include |
Эта директива изменяет строку, которую mod_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 |
| Контекст: | каталог, .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 |
| Контекст: | каталог, .htaccess |
| Статус: | Базовый |
| Модуль: | mod_include |
| Совместимость: | Доступно в версии 2.3.13 и более поздних. |
Начиная с версии 2.3.13, mod_include переключился на новый синтаксис ap_expr для условных выражений в элементах управления потоком #if. Эта директива позволяет переключиться на старый синтаксис, совместимый с Apache HTTPD версии 2.2.x и более ранними.
Директива SSIStartTag
| Описание: | Строка, начинающая элемент включения |
|---|---|
| Синтаксис: | SSIStartTag tag |
| Значение по умолчанию: | SSIStartTag "<!--#" |
| Контекст: | настройка сервера, виртуальный хост |
| Статус: | Базовый |
| Модуль: | mod_include |
Данная директива изменяет строку, по которой mod_include ищет маркер элемента включения для обработки.
Вы можете использовать этот параметр, если у вас 2 сервера, анализирующие вывод файла, каждый из которых обрабатывает различные команды (возможно, в разное время).
SSIStartTag "<%" SSIEndTag "%>"
В приведенном выше примере, который также определяет соответствующий SSIEndTag, позволит вам использовать директивы SSI, как показано в примере ниже:
Директивы SSI с альтернативными начальными и конечными тегами
<%printenv %>
См. также
Директива SSITimeFormat
| Описание: | Настраивает формат отображения строк даты |
|---|---|
| Синтаксис: | SSITimeFormat formatstring |
| Значение по умолчанию: | SSITimeFormat "%A, %d-%b-%Y %H:%M:%S %Z" |
| Контекст: | настройка сервера, виртуальный хост, каталог, .htaccess |
| Переопределение: | Все |
| Статус: | Базовый |
| Модуль: | mod_include |
Данная директива изменяет формат отображения строк даты при выводе DATE переменных окружения. formatstring соответствует формату в strftime(3) из стандартной библиотеки C.
Данная директива имеет тот же эффект, что и <!--#config timefmt=formatstring --> элемент.
SSITimeFormat "%R, %B %d, %Y"
Вышеуказанная директива приведет к отображению времени в формате "22:26, 14 июня 2002 года".
Директива SSIUndefinedEcho
| Описание: | Строка, отображаемая при выводе не заданной переменной |
|---|---|
| Синтаксис: | SSIUndefinedEcho string |
| Значение по умолчанию: | SSIUndefinedEcho "(none)" |
| Контекст: | настройка сервера, виртуальный хост, каталог, .htaccess |
| Переопределение: | Все |
| Статус: | Базовый |
| Модуль: | mod_include |
Данная директива изменяет строку, которую mod_include отображает, когда переменная не задана и "выводится".
SSIUndefinedEcho "<!-- undef -->"
Директива XBitHack
| Описание: | Анализ директив SSI в файлах с установленным битом выполнения |
|---|---|
| Синтаксис: | XBitHack on|off|full |
| Значение по умолчанию: | XBitHack off |
| Контекст: | настройка сервера, виртуальный хост, каталог, .htaccess |
| Переопределение: | Параметры |
| Статус: | Базовый |
| Модуль: | mod_include |
Директива XBitHack управляет анализом обычных HTML-документов. Данная директива влияет только на файлы с MIME-типом text/html. XBitHack может принимать следующие значения:
off- Нет специального обращения с исполняемыми файлами.
on- Любой
text/htmlфайл, у которого установлен бит выполнения пользователя, будет обрабатываться как серверный HTML-документ с парсингом SSI. 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