Пункт 150. Модуль Apache mod_include
Этот модуль предоставляет фильтр, который будет обрабатывать файлы перед их отправкой клиенту. Обработкой управляют специально отформатированные комментарии SGML, называемые
элементами . Эти элементы позволяют использовать условный текст, включать другие файлы или программы, а также устанавливать и печатать переменные среды.
Включение серверных включений
Включения на стороне сервера реализуются фильтром
INCLUDES
. Если документам, содержащим директивы включения на стороне сервера, присваивается расширение .shtml, следующие директивы заставят Apache проанализировать их и присвоить результирующему документу MIME-тип
text/html
:
AddType текст/html .shtml
AddOutputFilter ВКЛЮЧАЕТ .shtml
Следующая директива должна быть указана для каталогов, содержащих файлы shtml (обычно в
<Directory>
разделе, но эта директива также действительна в .htaccess
файлах, если
AllowOverride
Options
она установлена):
Опции +Включает
Для обратной совместимости server-parsed
обработчик также активирует фильтр INCLUDES. Кроме того, Apache активирует фильтр INCLUDES для любого документа с типом mime
text/x-server-parsed-html
или
text/x-server-parsed-html3
(и результирующий вывод будет иметь тип mime text/html
).
Для получения дополнительной информации см. наш учебник по включениям на стороне сервера.
PATH_INFO с включениями на стороне сервера
Файлы, обрабатываемые для включения на стороне сервера, больше не принимают запросы с 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 -->
Элемент конфигурации
Эта команда управляет различными аспектами синтаксического анализа. Допустимые атрибуты:
-
echomsg
( Апач 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"" -->
Элемент эха
Эта команда выводит одну из включенных переменных, определенных ниже. Если переменная не установлена, результат определяется директивой SSIUndefinedEcho
. Любые напечатанные даты зависят от текущего настроенного файла timefmt
.
Атрибуты:
-
var
- Значением является имя переменной для печати.
-
decoding
Указывает, должен ли Apache удалить кодировку из переменной перед дальнейшей обработкой переменной. По умолчанию это none
, где декодирование не выполняется. Если установлено значение
url
, будет выполняться декодирование URL-адресов (также известное как %-encoding; это подходит для использования в URL-адресах в ссылках и т. д.). Если установлено значение urlencoded
, кодировка, совместимая с application/x-www-form-urlencoded (найденная в строках запроса), будет удалена. Если установлено значение base64
, будет декодировано base64, а если установлено значение entity
, кодировка объекта HTML будет удалена. Декодирование выполняется до любого дальнейшего кодирования переменной. Несколько кодировок можно удалить, указав более одной кодировки, разделенной запятыми. Настройка декодирования остается в силе до тех пор, пока не встретится следующий атрибут декодирования или элемент не завершится.
Атрибут decoding
должен предшествовать соответствующему var
атрибуту, чтобы быть эффективным.
-
encoding
Указывает, как Apache должен кодировать специальные символы, содержащиеся в переменной, перед их выводом. Если установлено значение none
, кодирование выполняться не будет. Если установлено значение
url
, будет выполнено кодирование URL-адресов (также известное как %-encoding; это подходит для использования в URL-адресах в ссылках и т. д.). Если установлено значение urlencoded
, вместо этого будет выполняться кодирование, совместимое с application/x-www-form-urlencoded, и его следует использовать со строками запроса. Если установлено значение base64
, будет выполнено кодирование base64. В начале элемента echo
по умолчанию устанавливается значение
entity
, что приводит к кодировке объекта (что подходит в контексте HTML-элемента блочного уровня,
например , абзаца текста). Это можно изменить, добавив encoding
атрибут, который останется в силе до тех пор, пока encoding
не встретится следующий атрибут или элемент не завершится, в зависимости от того, что наступит раньше.
Атрибут encoding
должен предшествовать соответствующему var
атрибуту, чтобы быть эффективным.
Чтобы избежать проблем с межсайтовым скриптингом,
всегда следует кодировать предоставленные пользователем данные.
Пример
<!--#echo encoding="entity" var="QUERY_STRING" -->
Исполнительный элемент
Команда exec
выполняет заданную команду оболочки или сценарий CGI. Он должен mod_cgi
присутствовать на сервере. Если Options
IncludesNOEXEC
установлено, эта команда полностью отключена. Допустимые атрибуты:
-
cgi
Значение указывает (%-encoded) URL-путь к сценарию CGI. Если путь не начинается с косой черты (/), то он считается относительным к текущему документу. Документ, на который ссылается этот путь, вызывается как сценарий CGI, даже если сервер обычно не распознает его как таковой. Однако каталог, содержащий сценарий, должен быть разрешен для сценариев CGI (с помощью ScriptAlias
или Options
ExecCGI
).
Сценарий CGI получает PATH_INFO
строку запроса и ( QUERY_STRING
) исходного запроса от клиента; они не могут быть указаны в пути URL. Включаемые переменные будут доступны сценарию в дополнение к стандартной среде 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
. Включаемые переменные доступны команде в дополнение к обычному набору переменных 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
- Значение представляет собой (%-encoded) URL-путь. Если он не начинается с косой черты (/), то считается, что он относится к текущему документу. Обратите внимание, что здесь печатается не размер какого-либо вывода CGI, а размер самого сценария CGI.
This file is <!--#fsize virtual="/docs/mod/mod_include.html" --> bytes.
Обратите внимание, что во многих случаях это одно и то же. Однако этот file
атрибут не учитывает псевдонимы пространства URL-адресов.
Элемент фластмода
Эта команда печатает дату последней модификации указанного файла в соответствии со timefmt
спецификацией формата. Атрибуты такие же, как и у
fsize
команды.
Включаемый элемент
Эта команда вставляет текст другого документа или файла в проанализированный файл. Любой включенный файл подлежит обычному контролю доступа. Если для каталога, содержащего проанализированный файл, установлены параметры
, то будут включены IncludesNOEXEC
только документы с текстовым
MIME-типом ( text/plain
,
и т. д.). text/html
В противном случае сценарии CGI вызываются как обычно с использованием полного URL-адреса, указанного в команде, включая любую строку запроса.
Атрибут определяет местоположение документа и может появляться во включаемом элементе более одного раза; включение выполняется для каждого атрибута, переданного команде включения по очереди. Допустимые атрибуты:
-
file
- Значение представляет собой путь относительно каталога, содержащего текущий анализируемый документ. Он не может содержать
../
и не может быть абсолютным путем. Таким образом, вы не можете включать файлы, которые находятся за пределами корня документа или над текущим документом в структуре каталогов. Атрибут virtual
всегда следует использовать вместо этого.
-
virtual
Значение представляет собой (%-encoded) URL-путь. URL-адрес не может содержать схему или имя хоста, а только путь и необязательную строку запроса. Если он не начинается с косой черты (/), то считается, что он относится к текущему документу.
URL-адрес создается из атрибута, и выходные данные, которые сервер вернул бы, если бы клиент обратился к URL-адресу, включаются в проанализированные выходные данные. Таким образом, включаемые файлы могут быть вложены друг в друга.
Если указанный URL-адрес является программой CGI, программа будет выполнена, и ее выходные данные будут вставлены вместо директивы в проанализированном файле. Вы можете включить строку запроса в URL-адрес CGI:
<!--#include virtual="/cgi-bin/example.cgi?argument=value" -->
include virtual
следует использовать вместо того, exec cgi
чтобы включать вывод программ CGI в документ HTML.
Если KeptBodySize
директива правильно настроена и действительна для этого включенного файла, попытки POST-запросов к вложенному HTML-документу будут также переданы в подзапросы как POST-запросы. Без директивы все подзапросы обрабатываются как запросы GET.
-
onerror
Значение представляет собой (%-кодированный) URL-путь, который отображается, если предыдущая попытка включить файл или виртуальный атрибут не удалась. Чтобы быть эффективным, этот атрибут должен быть указан после охватываемых файловых или виртуальных атрибутов. Если попытка включить путь 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>
Элемент набора
Это устанавливает значение переменной. Атрибуты:
-
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" -->
Включить переменные
В дополнение к переменным в стандартной среде CGI они доступны для echo
команды, для
if
и elif
и для любой программы, вызываемой документом.
-
DATE_GMT
- Текущая дата по Гринвичу.
-
DATE_LOCAL
- Текущая дата в местном часовом поясе.
-
DOCUMENT_ARGS
- Эта переменная содержит строку запроса активного документа SSI или пустую строку, если строка запроса не включена. Для подзапросов, вызванных
include
директивой SSI, QUERY_STRING
будет представлять строку запроса подзапроса и
DOCUMENT_ARGS
будет представлять строку запроса документа SSI. (Доступно в Apache HTTP Server 2.4.19 и более поздних версиях.)
-
DOCUMENT_NAME
- Имя файла (за исключением каталогов) документа, запрошенного пользователем.
-
DOCUMENT_URI
- URL-адрес (%-decoded) документа, запрошенного пользователем. Обратите внимание, что в случае вложенных включаемых файлов это
не URL-адрес текущего документа. Также обратите внимание, что если URL-адрес изменен внутренне (например, с помощью
alias
или directoryindex
), отображается измененный URL-адрес.
-
LAST_MODIFIED
- Дата последней модификации документа, запрошенного пользователем.
-
QUERY_STRING_UNESCAPED
- Если в запросе активного документа SSI присутствует строка запроса, эта переменная содержит (%-decoded) строку запроса, экранированную для использования в оболочке (специальным символам, таким как
&
и т. д., предшествует обратная косая черта). Не устанавливается, если строка запроса отсутствует. Используйте DOCUMENT_ARGS
, если экранирование оболочки нежелательно.
Замена переменной
Подстановка переменных выполняется внутри строк в кавычках в большинстве случаев, когда они могут разумно использоваться в качестве аргумента директивы 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 -->
Справочная документация
См. также: Выражения в HTTP-сервере Apache для полного справочника и примеров. Ограниченные функции недоступны внутри mod_include
Устаревший синтаксис выражений
В этом разделе описывается синтаксис элемента, #if expr
если SSILegacyExprParser
установлено значение on
.
-
string
- истина, если строка не пуста
-
-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 имеет форму,
то она обрабатывается как регулярное выражение. Регулярные выражения реализованы движком PCRE и имеют тот же синтаксис, что и в Perl 5. Обратите внимание, что это просто псевдоним для
и ведет себя точно так же. /string2/
==
=
Если вы сопоставляете положительные ( =
или ==
), вы можете захватить сгруппированные части регулярного выражения. Захваченные части хранятся в специальных переменных $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 )
- истина, если 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
Описание: | Строка, которая завершает включаемый элемент |
Синтаксис: | 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 "<!-- Ошибка -->"
Директива 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
переменных среды. Строка
форматирования такая же, как 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-документ, проанализированный сервером.
-
full
- Что касается
on
, но также проверьте бит выполнения группы. Если он установлен, установите Last-modified
дату возвращаемого файла как время последнего изменения файла. Если он не установлен, то дата последнего изменения не отправляется. Установка этого бита позволяет клиентам и прокси кэшировать результат запроса.
Примечание
Вы не хотели бы использовать полную опцию, если только вы не гарантируете, что бит группового выполнения не установлен для каждого сценария SSI, который может быть #include
CGI или иным образом производить разные выходные данные при каждом попадании (или потенциально может измениться при последующих запросах).
Директива SSILastModified
имеет приоритет над
XBitHack
директивой, когда
SSILastModified
установлено значение
on
.