ENote
  • ✨Home
    • Відмова від відповідальності
  • Progr
    • Python
      • Модулі
        • pip
        • cgitb
        • datetime
          • Класс datetime() модуля datetime
            • Методы объекта datetime.datetime()
            • datetime.datetime examples
          • Класс timedelta() модуля datetime
            • datetime.timedelta examples
          • Класс date() модуля datetime
            • datetime.date examples
          • Класс time() модуля datetime
            • Формат для функций .strftime() и .strptime(). модуля datetime
        • os.path
        • pathlib
          • pathlib to str
        • subproces
        • os
        • Jinja
          • Синтаксис шаблонів Jinja
          • Клас Environment()
          • Простой пример cgi-скрипта c Jinja-шаблоном
          • Создание переменных
            • Як оновити глобальну змінну зсередини оператора IF / ELSE або циклу FOR
          • Фільтри і методи
          • Число у рядок, slices
          • Вбудовані фільтри Jinja2
        • re
          • re.search - example
          • re.findall - example
        • email / smtplib
          • Как отправлять электронные письма с помощью Python
        • requests
          • Як зберегти та завантажити файли cookie в запитах Python?
          • Извлечение и установка cookies с модулем requests в Python
          • Links
        • http.cookies
          • Всё о работе с cookie в Python — класс http.cookies
        • xlrd
        • xlwt
        • borb
          • ChunkOfText
          • send_usage_statistics
          • borb clear
          • 2.1.3 vs 2.1.15
          • QR-code
          • Залежності borb
        • JSON
          • Кирилиця в JSON
        • matplotlib
        • argparse
        • click
        • configparser
        • traceback
        • sys
          • exit()
        • mysql-connector-python
        • logging
        • icrawler
        • Auto Plates
        • rembg
        • random
      • Strings
        • Built-in methods
        • Форматування виводу
        • Початкові нулі
        • Рядок в число
      • list
        • Об’єднання списків
        • list.sort(), sorted()
        • list.reverse(), reversed()
        • all(), any()
        • sum(), min(), max()
        • map(), filter(), reduce()
        • join(), split()
      • tuple
      • dict
        • Об'єднання / злиття словників
        • Сортування словника Python: значення, ключі тощо
      • set
      • class Enum
      • Середнє арифметичне
      • Virtual environment
        • web-app
      • type(), isinstance()
      • __main__
      • Files & Dirs
        • Try except for exception handling
        • Cписок файлов директории
        • User Home Dir
        • Copy file
      • *args, **qwargs
      • Links
      • Область видимости
      • Handling a File Error
      • assert
      • if
      • Числа
        • Округлення чисел
        • Отримати число з рядка
      • Обработка исключений в Python
      • Файлы и сериализация данных
      • OOP
      • Net and Web
      • Структура проекта на Python
      • Распаковка итерируемых объектов
      • Links
      • Algorithms
      • Python exit commands: quit(), exit(), sys.exit() and os._exit()
      • Цикли for / while
      • uuid
    • JavaScript
      • String
        • replaceAll() polyfill
        • Шаблонные строки
      • Array
        • Все способы перебора массива в JavaScript
      • Object
      • document.location
      • RegExp
      • Examples
        • Вычисление остатка от деления
        • Остаток от деления и деление без остатка
        • Округление числа
      • XMLHttpRequest
      • alert, prompt, confirm
      • onclick
      • hidden, display:none
      • LocalStorage, sessionStorage
      • null, undefined
      • cookies (js)
      • var, let и const
        • var vs let
        • const
      • Модифікація DOM
        • DOM select
      • JSON
        • Try
      • fetch
      • typeof
      • FormData не включає disabled набори полів
      • FormData, fdata
      • Більше одного відео YouTube на одній сторінці
    • HTML, CSS
      • favicon
      • Деякі спецсимволи
      • meta
      • ASCII table
      • lang
      • Псевдоелементи ::after і ::before
      • Cursor
      • Об использовании нестандартных пробелов
      • Картинка фоном
      • Безпечні веб-шрифти
      • Завжди внизу, незалежно від пропорцій екрану
      • напівпрозорий елемент
      • Символи з тінью
      • SVG (bootstrap)
      • rel = canonical
      • link stylesheet: integrity & crossorigin
      • rel = noopener
    • Bootstrap
      • Form Validate
      • Password show/hide
    • Errors
  • Dev
    • Git
      • clone
      • git-scm (book)
      • git config
        • files .git*
        • core.filemode
        • core.sharedRepository
      • .gitignore
      • .gitkeep
      • Видалити з репозиторію
        • Видалений файл з однієї гілки...
      • Пам’ятка
        • Перегляд історії комітів
        • Скасувати git add
        • revert
        • Скасувати внесені зміни у файл
        • Додати до коміту файл
        • Видалити історію попередніх коммітів, та почати "з нуля"
        • Додати файли в останній коміт
      • Робота з гілками
        • Порівняти гілки
      • Git за полчаса
      • Три розділи проєкту Git
      • Merge conflict
      • Pull error
        • Git Error: You have divergent branches...
      • diff
      • Video
      • Merge скасувати
      • .gitignore: Permission denied
    • GitHub
      • SSH-підключення до GitHub
      • Перенести на сервер локальный репозиторий
      • Перенести на сервер репозиторій разом з історією
      • Створення змісту
    • Security
      • robots.txt
      • Cookies
    • Аутентифікація і cookies
      • ChatGPT
  • data
    • MySQL
      • MyISAM vs InnoDB
      • Типи даних
        • NULL (todo)
        • TIMESTAMP
        • YEAR
        • JSON
        • Требования к памяти для символьных типов
        • Поиск записей в таблице, которым нет соответствия в другой
      • Приклад створення БД, та користувача
        • Права для пользователей
      • Переглянути всі індекси таблиці
      • Копіювання, клонування таблиць
      • TEMPORARY TABLE
      • JOIN
      • ALTER TABLE
      • AUTO_INCREMENT
        • AUTO_INCREMENT у складовому індексі
      • LIMIT
        • Использование MySQL LIMIT
      • 10 Примеров входной загрузки данных из текстового файла в таблицы MySQL
      • Рішення
        • Выявление и удаление несвязанных записей
        • Выборка произвольных записей
        • Коректне сортування українських літер
        • Найти записи, которые присутствуют в одной таблице и отсутствуют во второй
        • Как удобно посмотреть данные...
        • Нахождение "дыр" в нумерации
        • Знайти дубликати полів в одній таблиці
        • Дані колонки 1 табл. перенести в 2 табл.
      • Функції
        • LAST_INSERT_ID()
        • GROUP_CONCAT
        • COUNT + DISTINCT
        • Функции для работы с датами и временем
      • Автоматизируйте создание бэкапов
      • mysqldump
        • Time Zone UTC
      • Результат запиту у файл
      • Результат запиту у змінну
      • Пособие по MySQL на Python
      • Змінні
      • Эмуляция функции row_number() в MySQL
      • Изучаем хранимые процедуры MySQL
      • SELECT DISTINCT
      • Dump всієї бази даних
      • Індекси
      • FOREIGN KEY
      • MAX(), MIN()
      • LENGTH, CHAR_LENGTH
      • Встановлення
    • MariaDB
    • PostgreSQL
      • Работа с базой данных PostgreSQL
      • Работаем с PostgreSQL через командную строку в Linux
    • Domains
      • Життєвий цикл доменів
      • Статус домена
    • SQLite, MySQL и PostgreSQL: сравниваем популярные реляционные СУБД
  • Linux
    • DNS
      • Как в DNS прописать 301 редирект
      • mail
        • SPF
          • Mirohost
        • _dmarc _domainkey
        • DKIM
        • Прописати ключі DKIM в exim
        • Листи з неіснуючим адресатом
    • Server
      • Zomro
        • pip
        • SSH-доступ по ключу (zomro)
        • venv
        • UnicodeEncodeError: 'latin-1' codec can't encode character
        • Mail Ports
        • Редірект з SSL-сертификатом на транзитному сайті
        • Редірект з SSL за допомогою .htaccess
      • Створення нового користувача з привілеями sudo в Ubuntu
      • SSH-доступ по ключу
      • Часовий пояс в Ubuntu 20.04
      • SSH-підключення командний рядок
      • Як встановити Python 3.9 (нижчу) на Ubuntu 22.04
      • Автозагрузка сервисов в Ubuntu
      • Підвищення безпеки SSH
      • Ubuntu Server
        • Art 01
    • Commands
      • adduser
      • apt
      • cat
      • ls
      • tar
      • ln
      • find
      • chmod
      • chown
      • mv
      • dig
      • ping
      • passwd
      • htpasswd
      • umask
      • usermode
      • history
      • cmp
      • chattr +i
    • Config
      • Keyboard
      • windows
      • My kbdswtch
      • Затримка при завантаженні системи
      • Files
        • /etc/resolv.conf
        • /boot/grub/grub.cfg
        • .config/user-dir.dirs
        • /etc/fstab
      • Як встановити шрифти
    • Apache
      • Встановлення
      • Подключить виртуальный хост
      • Файл .htaccess
        • Установка индексного файла
        • Фільтр IP-адрес
        • ModRewrite
          • Заборонити доступ за User-Agent
          • Перенаправити на іншу сторінку
          • Додавати слеш до адреси
        • Включити SSI
        • Виконувати скрипти CGI
        • Тимчасовий перехід з одного домену на інший
      • SSI
      • SSL
      • Відключити старт Apache з системою
      • Помилки
        • Скрипт не працює
        • CGI-скрипт не виводить кирилицю
        • Could not reliably determine
        • Permissions are missing on a component of the path
        • Symbolic link not allowed or link target not accessible
      • AddType, AddLanguage, AddCharset
    • Nginx
      • 301 редирект з www. та http: на https://(без www.)domain
    • Soft
      • SublimeText
        • Plugins
      • Firefox
      • Gwenview
      • inkscape
      • Double Commander
      • nano
      • mc
        • Знайти потрібний файл
      • meld / diffuse
      • hexedit
      • Kazam - відео з екрану
      • VeraCrypt
      • XnView MP
      • LibreOffice
      • xdotool
      • System Load Monitor
      • Battery Monitor
      • qBittorrent
    • Перетворення .RPM в .DEB
    • Bash
      • Конкатенация строк в Bash
      • Page
    • Файлові часові позначки в Linux: atime, mtime, ctime
    • Права доступу для файлів і каталогів
    • Зміна паролю root
    • Быстро удалить огромное количество файлов в каталоге
    • Як узнати версію Linux?
    • USB Flash ext4
    • Clear Cache
    • Доступ до спільної папки на Windows
    • Віртуальні консолі TTY1–TTY6
    • APT. Заборона оновлення
  • Різне
    • GitBook
    • Банковское округление
    • Ім’я користувача Youtube
  • Hard
    • Hardware
      • Acer Extensa
      • Таймер Feron TM22
      • WD My Book World Edition 2Tb
        • FTP
        • SSH
          • Проблеми
        • SSHFS
      • Canon PIXMA E3340
      • Термометри
    • Auto
      • Акумулятор
    • Electro
    • USB Flash recovery
Powered by GitBook
On this page
  • Comments
  • Переменные
  • Подключить файл или скрипт
  • Конструкция if / else
  • Текущая дата и время на SSI 2.2
  • Подробнее
  • Более подробный список переменных strftime
  1. Linux
  2. Apache

SSI

PreviousТимчасовий перехід з одного домену на іншийNextSSL

Last updated 1 year ago

Технологія SSI (Server Side Includes) – потужний та гнучкий засіб для динамічного формування веб-сторінок на стороні сервера. Суть технології полягає в препроцессингу сторінок, що запитуються на серверній стороні на предмет пошуку в них спеціальних команд - директив SSI.

Директиви SSI дозволяють використовувати в HTML документах такі можливості як виконання інших програм, отримання інформації про файли та змінні оточення, об'єднання кількох файлів в один.

Якщо сервер не налаштований на підтримку SSI, команди SSI не обробляються і відправляються користувачеві як є і у веб-сторінці виглядають як коментар.

  • /

Создать переменную и передать ей значение:

<!--#set var="PAGE_ID" value="Главная страница"-->

Вывести значение переменной:

<!--#echo var='PAGE_ID' -->

Чтобы передать переменную, включая переменные среды (например, LAST_MODIFIED), надо указать что это есть переменная, а не буквальная строка, используя знак доллара $ перед именем переменной.

<!-- apache 2.2 style -->
 
<!-- apache 2.4 style -->
<!--#set var="modified" value="$LAST_MODIFIED" -->

Чтобы поместить буквальный знак доллара в значение переменной, нужно экранировать знак доллара с помощью обратного слэша.

<!-- apache 2.2 style -->
 
<!-- apache 2.4 style -->
<!--#set var="cost" value="\$100" -->

Наконец, если вы хотите поместить переменную в более длинную строку, и есть вероятность, что имя переменной столкнется с некоторыми другими символами и, таким образом, будет смущено этими символами, вы можете поместить имя переменная в фигурных скобках, чтобы устранить эту путаницу.

<!-- apache 2.2 style -->
 
<!-- apache 2.4 style -->
<!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" -->

Ось, цікава можливість:

<!--#set var="LANG" value="en"-->
<!--#include virtual="/projects/$LANG/data.htm"-->

Comments

The syntax for the comment in the .shtml file is:

  <!--comment -->

This comment tag allows a web page designer to insert comments into the .html or .shtml file without having those comments displayed when the browser serves up the page.

Any

  <!--#comment -->

which includes the # pound sign is interpreted by the SSI enabled server as a command rather than as a comment. Since it is in the form of a comment, it does not get displayed by the browser. Since it has the pound sign it is interpreted as a command and the results of that command are then displayed by the browser. Commands can vary widely from server to server but the 'echo' command is one of the most common. "Echo" returns to the .shtml document the results of the command.

Переменные

  <!--#set var="SITE_NAME" value="Best Site"-->
  <!--#set var="PAGE_TITLE" value="Главная страница"-->

Вывод переменных:

  <title><!--#echo var="SITE_NAME"--></title>

Если кириллица выводится крякозябликами - надо добавить encoding="none"

  <h1><!--#echo encoding="none" var="PAGE_TITLE"--></h1>

encoding="none" также надо установить, если в переменной содержится html-код, например:

<!--#set var='MYWORD' value='<small>small</small>'-->

иначе, текст так и будет выведен на экран: <small>small</small>, а не просто слово "small" меньшим шрифтом, как задумывалось.

Подключить файл или скрипт

Погрузить код из файла:

  <!--#include virtual="/_parts/head.htm"-->

Погрузить результат выполнения скрипта:

  <!--#exec cgi="cgi-bin/add.cgi"-->

Подробнее про include file/virtual и другие директивы

Передача параметров скрипту

при исполнении htm-файла (без участия человека), работает только так:

  <!--#include virtual="cgi-bin/add.cgi?val1=ABRA&val2=KADABRA"-->

А такой вариант не проходит:

  <!--#exec cgi="cgi-bin/add.cgi?val1=ABRA&val2=KADABRA"-->

Хотя, если запускать так, то все нормально:

  <!--#exec cgi="cgi-bin/add.cgi"-->

но без переменных.

Конструкция if / else

  <!--#if expr="test_condition" -->
  <!--#elif expr="test_condition" -->
  <!--#else -->
  <!--#endif -->

Пример 2.2:

<a href="/<!--#echo var='LANG'-->/analytics/">
  <!--#if   expr="$LANG=='de'"-->Analytik
  <!--#elif expr="$LANG=='en'"-->Analytics
  <!--#elif expr="$LANG=='ru'"-->Аналитика
  <!--#else -->Аналітика
  <!--#endif-->
</a>

или

Пример 2.4:

<a href="/<!--#echo var='LANG'-->/analytics/">
  <!--#if   expr="v('LANG')=='de'"-->Analytik
  <!--#elif expr="v('LANG')=='en'"-->Analytics
  <!--#elif expr="v('LANG')=='ru'"-->Аналитика
  <!--#else -->Аналітика
  <!--#endif-->
</a>

Унарные операторы 2.4

  • -n - True если строка не пустая

    • OLD: expr="$SOME_VAR", NEW: expr="-n v('SOME_VAR')"

  • -z - True если строка пустая

    • OLD: expr="!$SOME_VAR" / expr="$SOME_VAR==%%''%%", NEW: expr="-z v('SOME_VAR')"

<!--#set var="a" value="AAAAA" -->
<!--#set var="b" value="BBBBB" -->

<!--#if   expr="-n v('a') && -n v('b')" --> <!--#set var="c" value= "$a $b" -->
<!--#elif expr="-n v('a') && -z v('b')" --> <!--#set var="c" value= "$a none" -->
<!--#elif expr="-z v('a') && -n v('b')" --> <!--#set var="c" value= "none $b" -->
<!--#else -->
                                            <!--#set var="c" value= "none name" -->
<!--#endif -->

<p><!--#echo var='c' --></p>

Текущая дата и время на SSI 2.2

<!--#config timefmt="%Y-%m-%d %H:%M" -->
<!--#set var="CURR" value="$DATE_LOCAL"-->
<input class="form-control input-sm" id="date_time" value="<!--#echo var='CURR'-->" />

2016-06-20 21:48

| TIME_YEAR | Текущий год (например 2010) | | TIME_MON | Текущий месяц ( 01, ..., 12) | | TIME_DAY | Текущий день месяца ( 01, ...) | | TIME_HOUR | Часовая часть текущего времени ( 00, ..., 23) | | TIME_MIN | Минувшая часть текущего времени | | TIME_SEC | Вторая часть текущего времени | | TIME_WDAY | День недели (начиная с 0 воскресенья) | | TIME | Дата и время в формате 20101231235959 | | SERVER_SOFTWARE | Строка версии сервера | | API_VERSION | Дата версии API (макс. Номер модуля) |

Подробнее

Настройка сервера

Модулем SSI по умолчанию обрабатываются файлы с расширением .shtml и .shtm , но можно настроить сервер и на обработку файлов .html и .htm. Для этого необходимо указать в конфигурационном файле Apache (httpd.conf) или в пользовательском файле управления каталогами .htaccess следующие строки:

AddType text/html .htm .html .shtml
AddHandler server-parsed .htm .html .shtml
Options +Includes

Примечание: Файл httpd.conf отвечает за настройку всего веб-сервера, не доступен непривилегированному пользователю. Скрытый (dot-файл) .htaccess размещается в пользовательских каталогах и отвечает за их настройки.

Формат директив SSI

Общий синтаксис директивы SSI таков:

<!--#команда параметр="значение"-->

Некоторые команды имеют еще и подкоманды:

&&подкоманда&&

Директивы SSI

В табл. 1 перечислены основные директивы SSI.

Табл.1 Директивы SSI

  <td>Вставка в документ переменных среды (браузер, дата, имя документа, ...).</td>
</tr>

<tr>
  <td>include</td>

  <td>Включение файла в HTML документ.</td>
</tr>

<tr>
  <td>fsize</td>

  <td>Включение размера файла в HTML документ.</td>
</tr>

<tr>
  <td>flastmod&nbsp;</td>

  <td>Включение даты последней модификации файла в HTML документ.</td>
</tr>

<tr>
  <td>exec</td>

  <td>Выполнение внешнего исполняемого файла (CGI программы). Выходной поток данных (стандартный вывод) этой программы включается в документ.</td>
</tr>

<tr>
  <td>config</td>

  <td>Установка параметров для SSI+ команд.</td>
</tr>

<tr>
  <td>odbc</td>

  <td>Обращение к внешней ODBC СУБД.</td>
</tr>

<tr>
  <td>email</td>

  <td>Отправка электронной почты или представление формы.</td>
</tr>

<tr>
  <td>if</td>

  <td>Условный оператор, управляющий выполнением других команд SSI и вывода документа.</td>
</tr>

<tr>
  <td>goto</td>

  <td>Оператор перехода на определенную SSI метку (label).</td>
</tr>

<tr>
  <td>label</td>

  <td>Метка в документе.</td>
</tr>

<tr>
  <td>break</td>

  <td>Остановка вывода документа.</td>
</tr>

Рассмотрим некоторые из перечисленных директив более подробно.

echo

<!--#echo var="переменная_среды"-->

Предназначена для вставки в документ значений специальных переменных SSI, а также других переменных среды.

Пример:

<!--#echo var="HTTP_USER_AGENT"-->

Некоторые переменные окружения:

  <td>локальное имя файла</td>
</tr>

<tr>
  <td>DOCUMENT_URI</td>

  <td>URL файла</td>
</tr>

<tr>
  <td>DATE_LOCAL</td>

  <td>Текущая дата и время (локаль сервера)</td>
</tr>

<tr>
  <td>DATE_GMT</td>

  <td>Текущая дата и время по Гринвичу</td>
</tr>

<tr>
  <td>LAST_MODIFIED</td>

  <td>Дата и время последнего изменения текущего файла</td>
</tr>

<tr>
  <td>REMOTE_ADDR</td>

  <td>IP адрес удаленного клиента</td>
</tr>

<tr>
  <td>QUERY_STRING</td>

  <td>Строка, полученная от клиента</td>
</tr>

<tr>
  <td>SERVER_SOFTWARE</td>

  <td>Имя HTTP server software</td>
</tr>

<tr>
  <td>SERVER_NAME</td>

  <td>Имя компьютера, на котором работает WWW сервер</td>
</tr>

<tr>
  <td>REMOTE_HOST</td>

  <td>Имя компьютера удаленного клиента</td>
</tr>

<tr>
  <td>HTTP_USER_AGENT</td>

  <td>Имя браузера клиента (browser software).</td>
</tr>

<tr>
  <td>HTTP_REFERER</td>

  <td>URL адрес HTML документа из которого сделан запрос клиентом</td>
</tr>

include

<!--#include file="путь"-->
<!--#include virtual="путь"-->

Предназначена для вставки содержимого файла в текущий документ, также может использоваться для вывода результатов работы скрипта.

Аргументы:

  • file - Путь к файлу, относительно текущей директории. (То есть не может быть абсолютным путем к файлу (начинаться с / или содержать ../).

  • virtual - Виртуальный (фактический) путь к документу на сервере. Он может начинатся с /, но должен быть на том же сервере.

Пример:

<!--#include file="docext.html"-->
<!--#include virtual="/counters/spylog.txt"--
<!--#include virtual="/cgi-bin/counter.pl" -->

fsize

<!--#fsize file="путь"--> <!--#fsize virtual="путь"-->

Выводит размер файла, формат выдачи может быть изменен командой config

Аргументы:

  • file - Путь к файлу, относительно текущей директории. (То есть не может быть абсолютным путем к файлу (начинаться с / или содержать ../).

  • virtual - Виртуальный (фактический) путь к документу на сервере. Он может начинатся с /, но должен быть на том же сервере.

Пример:

<!--#fsize virtual="ssi.htm"-->

flastmod

<!--#flastmod file="путь"-->
<!--#flastmod virtual="путь"-->

Выводит дату/время последнего изменения файла, формат выдачи может быть изменен командой config

Аргументы:

  • file - Путь к файлу, относительно текущей директории. (То есть не может быть абсолютным путем к файлу (начинаться с / или содержать ../).

  • virtual - Виртуальный (фактический) путь к документу на сервере. Он может начинатся с /, но должен быть на том же сервере.

Пример:

<!--#flastmod virtual="index.html"-->

exec

<!--#exec cgi="/cgi-bin/counter.pl"-->

Вызывает внешние программы, формат выдачи может быть изменен командой config.

Аргументы:

  • cmd - вызов исполняемых программ в UNIX shell.

  • cgi - вызов CGI скрипта.

Пример:

<!--#exec cmd="/bin/finger vasjapjatkin@mail.ru"--> <!--#exec cgi="/cgi-bin/puperscript.cgi"-->

config

Модифицирует формат вывода для других команд.

Аргументы:

errmsg - формат сообщения об ошибке, которое выдается когда обработчик SSI+ обнаруживает ошибки. Для SSI+ также можно использовать onerr.

Пример: <!--#config errmsg="Ошибка обработки SSI запроса"-->

sizefmt - формат информации об объеме файла. Допустимые значения sizefmt - bytes или addrev. Они задают округление значения объема файла до ближайшего килобайта.

Пример: <!--#config sizefmt="addrev"-->

timefmt - формат значений даты/времени.

Пример:

<!--#config timefmt="%D %r"-->
 <!--#flastmod file="ssi.htm"-->

Некоторые форматы представления даты и времени

  <th>Значение</th>

  <th>Пример</th>
</tr>

<tr>
  <td>%a</td>

  <td>День недели в сокращенном виде</td>

  <td>Sun</td>
</tr>

<tr>
  <td>%A</td>

  <td>День недели</td>

  <td>Sunday</td>
</tr>

<tr>
  <td>%b</td>

  <td>Месяц в сокращенном виде (также %h)</td>

  <td>Jan</td>
</tr>

<tr>
  <td>%B</td>

  <td>Месяц&nbsp;</td>

  <td>January</td>
</tr>

<tr>
  <td>%d</td>

  <td>Дата&nbsp;</td>

  <td>01</td>
</tr>

<tr>
  <td>%D</td>

  <td>Дата в формате %m/%d/%y</td>

  <td>06/23/99</td>
</tr>

<tr>
  <td>%e</td>

  <td>Дата</td>

  <td>1</td>
</tr>

<tr>
  <td>%H</td>

  <td>Время в часах в 24-часовой системе</td>

  <td>13</td>
</tr>

<tr>
  <td>%I</td>

  <td>Время в часах в 12-часовой системе</td>

  <td>01</td>
</tr>

<tr>
  <td>%m</td>

  <td>Номер месяца</td>

  <td>11</td>
</tr>

<tr>
  <td>%M</td>

  <td>Количество минут</td>

  <td>08</td>
</tr>

<tr>
  <td>%p</td>

  <td>AM|PM</td>

  <td>AM</td>
</tr>

<tr>
  <td>%r</td>

  <td>Время в формате %I:%M:%p</td>

  <td>09:21:13 PM</td>
</tr>

<tr>
  <td>%S</td>

  <td>Количество секунд</td>

  <td>09</td>
</tr>

<tr>
  <td>%T</td>

  <td>Время в 24-часовой системе в формате %H:%M:%S</td>

  <td>12:22:40</td>
</tr>

<tr>
  <td>%Y</td>

  <td>Год</td>

  <td>1996</td>
</tr>

Применение SSI

Пожалуй, наиболее значимым достоинством SSI является возможность выполнять шаблонную верстку веб-страниц, собирая их из нескольких файлов. Дело в том, что обычно страницы сайта включают некоторую часть одинаковой информации. Вынося такого рода фрагменты html-кода в отдельные файлы, можно затем повторно использовать их, собирая страницы с помощью SSI.

Типичный пример - это вынесение в отдельный файл логотипа страницы и меню навигации ("шапка"), в другой файл - нижнего колонтитула ("подвал" страницы), тогда третья часть такой страницы может содержать различную информацию. Такой подход позволяет ускорить разработку новых сайтов и упростить модернизацию имеющихся.

Более подробный список переменных strftime

What follows is a summary of the various strftime time output format manipulations available:

     %A    is replaced by national representation of the full weekday name.
     <!--#config timefmt="%A" -->
     
 <B>%a</B>    is replaced by national representation of the abbreviated weekday       name, where the abbreviation is the first three characters. &lt;!--#config timefmt="%a" --&gt; <!--#config timefmt="%a" --><!--#echo var="DATE_LOCAL" --> <B>%B</B>    is replaced by national representation of the full month name. &lt;!--#config timefmt="%B" --&gt; <!--#config timefmt="%B" --><!--#echo var="DATE_LOCAL" --> <B>%b</B>    is replaced by national representation of the abbreviated month &lt;!--#config timefmt="%b" --&gt; <!--#config timefmt="%b" --><!--#echo var="DATE_LOCAL" -->       name, where the abbreviation is the first three characters. <B>%C</B>    is replaced by (year / 100) as decimal number; single digits are       preceded by a zero. &lt;!--#config timefmt="%C" --&gt; <!--#config timefmt="%C" --><!--#echo var="DATE_LOCAL" --> <B>%c</B>    is replaced by national representation of time and date (the format       is similar with produced by asctime(3)). &lt;!--#config timefmt="%c" --&gt; <!--#config timefmt="%c" --><!--#echo var="DATE_LOCAL" --> <B>%D</B>    is equivalent to ``%m/%d/%y''. &lt;!--#config timefmt="%D" --&gt; <!--#config timefmt="%D" --><!--#echo var="DATE_LOCAL" --> <B>%d</B>    is replaced by the day of the month as a decimal number (01-31). &lt;!--#config timefmt="%d" --&gt; <!--#config timefmt="%d" --><!--#echo var="DATE_LOCAL" --> <B>%e</B>    is replaced by the day of month as a decimal number (1-31); single       digits are preceded by a blank. &lt;!--#config timefmt="%e" --&gt; <!--#config timefmt="%e" --><!--#echo var="DATE_LOCAL" --> <B>%H</B>    is replaced by the hour (24-hour clock) as a decimal number       (00-23). &lt;!--#config timefmt="%H" --&gt; <!--#config timefmt="%H" --><!--#echo var="DATE_LOCAL" --> <B>%h</B>    the same as %b. &lt;!--#config timefmt="%h" --&gt; <!--#config timefmt="%h" --><!--#echo var="DATE_LOCAL" --> <B>%I</B>    is replaced by the hour (12-hour clock) as a decimal number       (01-12). &lt;!--#config timefmt="%I" --&gt; <!--#config timefmt="%I" --><!--#echo var="DATE_LOCAL" --> <B>%j</B>    is replaced by the day of the year as a decimal number (001-366). &lt;!--#config timefmt="%j" --&gt; <!--#config timefmt="%j" --><!--#echo var="DATE_LOCAL" --> <B>%k</B>    is replaced by the hour (24-hour clock) as a decimal number (0-23); &lt;!--#config timefmt="%k" --&gt; <!--#config timefmt="%k" --><!--#echo var="DATE_LOCAL" --> <B>%l</B>    is replaced by the hour (12-hour clock) as a decimal number (1-12);       single digits are preceded by a blank. &lt;!--#config timefmt="%l" --&gt; <!--#config timefmt="%l" --><!--#echo var="DATE_LOCAL" --> <B>%M</B>    is replaced by the minute as a decimal number (00-59). &lt;!--#config timefmt="%M" --&gt; <!--#config timefmt="%M" --><!--#echo var="DATE_LOCAL" --> <B>%m</B>    is replaced by the month as a decimal number (01-12). &lt;!--#config timefmt="%m" --&gt; <!--#config timefmt="%m" --><!--#echo var="DATE_LOCAL" --> <B>%n</B>    is replaced by a newline. <B>%p</B>    is replaced by national representation of either "ante meridiem" or       "post meridiem" as appropriate. &lt;!--#config timefmt="%p" --&gt; <!--#config timefmt="%p" --><!--#echo var="DATE_LOCAL" --> <B>%R</B>    is equivalent to ``%H:%M''. &lt;!--#config timefmt="%R" --&gt; <!--#config timefmt="%R" --><!--#echo var="DATE_LOCAL" --> <B>%r</B>    is equivalent to ``%I:%M:%S %p''. &lt;!--#config timefmt="%A" --&gt; <!--#config timefmt="%A" --><!--#echo var="DATE_LOCAL" --> <B>%S</B>    is replaced by the second as a decimal number (00-60). &lt;!--#config timefmt="%S" --&gt; <!--#config timefmt="%S" --><!--#echo var="DATE_LOCAL" --> <B>%s </B>   is replaced by the number of seconds since the Epoch, UTC (see       mktime(3)). &lt;!--#config timefmt="%s" --&gt; <!--#config timefmt="%s" --><!--#echo var="DATE_LOCAL" --> <B>%T</B>    is equivalent to ``%H:%M:%S''. &lt;!--#config timefmt="%T" --&gt; <!--#config timefmt="%T" --><!--#echo var="DATE_LOCAL" --> <B>%t</B>    is replaced by a tab. <B>%U</B>    is replaced by the week number of the year (Sunday as the first day       of the week) as a decimal number (00-53). &lt;!--#config timefmt="%A" --&gt; <!--#config timefmt="%A" --><!--#echo var="DATE_LOCAL" --> <B>%u</B>    is replaced by the weekday (Monday as the first day of the week) as       a decimal number (1-7). &lt;!--#config timefmt="%u" --&gt; <!--#config timefmt="%u" --><!--#echo var="DATE_LOCAL" --> <B>%V</B>    is replaced by the week number of the year (the first Monday as the       first day of week 1) as a decimal number (01-53). &lt;!--#config timefmt="%V" --&gt; <!--#config timefmt="%V" --><!--#echo var="DATE_LOCAL" --> <B>%v</B>    is equivalent to ``%e-%b-%Y''. &lt;!--#config timefmt="%v" --&gt; <!--#config timefmt="%v" --><!--#echo var="DATE_LOCAL" --> <B>%W</B>    is replaced by the week number of the year (Monday as the first day       of the week) as a decimal number (00-53). &lt;!--#config timefmt="%W" --&gt; <!--#config timefmt="%W" --><!--#echo var="DATE_LOCAL" --> <B>%w</B>    is replaced by the weekday (Sunday as the first day of the week) as       a decimal number (0-6). &lt;!--#config timefmt="%w" --&gt; <!--#config timefmt="%w" --><!--#echo var="DATE_LOCAL" --> <B>%X</B>    is replaced by national representation of the time. &lt;!--#config timefmt="%X" --&gt; <!--#config timefmt="%X" --><!--#echo var="DATE_LOCAL" --> <B>%x</B>    is replaced by national representation of the date. &lt;!--#config timefmt="%x" --&gt; <!--#config timefmt="%x" --><!--#echo var="DATE_LOCAL" --> <B>%Y</B>    is replaced by the year with century as a decimal number. &lt;!--#config timefmt="%Y" --&gt; <!--#config timefmt="%Y" --><!--#echo var="DATE_LOCAL" --> <B>%y</B>    is replaced by the year without century as a decimal number       (00-99). &lt;!--#config timefmt="%y" --&gt; <!--#config timefmt="%y" --><!--#echo var="DATE_LOCAL" --> <B>%Z</B>    is replaced by the time zone name. &lt;!--#config timefmt="%Z" --&gt; <!--#config timefmt="%Z" --><!--#echo var="DATE_LOCAL" --> <B>%+</B>    is replaced by national representation of the date and time (the       format is similar with produced by date(1)). &lt;!--#config timefmt="%+" --&gt; <!--#config timefmt="%+" --><!--#echo var="DATE_LOCAL" --> <B>%%</B>    is replaced by `%'.

На сервере Win2000 для запуска скрипта из тела hml использывал "exec cgi" иначе выводится полный текст скрипта на страницу.

с таким расположением кавычек не работает:

но так можно:

(в т.ч. файлы: сущ., пустой, директ.)

2.4 проверь

⚠️
⚠️
➡️
🆘
Apache 2.4 SSI
https://httpd.apache.org/docs/2.4/ru/
Умовні вирази 2.4
Змінні середовища 2.4
другие унарные операторы