02. .htaccess и SSI
Прежде чем собирать сайт из отдельных «кирпичей» (partials), нужно сказать серверу: «обрабатывай команды SSI». По умолчанию сервер отдаёт HTML как есть — он не знает, что строчки вида <!--#include ... --> — это не комментарий, а команда.
За эту настройку отвечает файл .htaccess — небольшой конфигурационный файл в корне сайта. Разберём его построчно.
Полный файл
.htaccess# ============================================================
# ФАЙЛ: .htaccess
# АВТОР: Ефимов Андрей Михайлович
# НАЗНАЧЕНИЕ: Включает обработку SSI-директив в HTML-файлах.
# ============================================================
Options +Includes
AddOutputFilter INCLUDES .html .shtml
ErrorDocument 404 /404.html
Пятнадцать строк — а сколько за ними. Идём по порядку.
Строки 1–5: комментарии с паспортом
.htaccess# ============================================================
# ФАЙЛ: .htaccess
# АВТОР: Ефимов Андрей Михайлович
# НАЗНАЧЕНИЕ: Включает обработку SSI-директив в HTML-файлах.
# ============================================================
В .htaccess комментарии начинаются с символа решётки #. Всё, что идёт после решётки до конца строки, сервер игнорирует.
Мы поставили наверху блок-паспорт — тот самый, что утверждён в стандарте проекта. Через год любой человек, открывший файл, за десять секунд поймёт, что это за файл и зачем он. Это и есть «инженерный след».
В .htaccess используется #. В HTML — <!-- ... -->. В CSS — /* ... */. Не путать: сервер парсит каждый файл своим синтаксисом.
Строка 6: пустая строка-разделитель
Пустая строка не несёт смысла для сервера, но разделяет блок паспорта и рабочую часть. Читаемость важнее экономии байтов.
Строка 7: Options +Includes
.htaccessOptions +Includes
Это главная команда всего файла. Без неё SSI работать не будет.
- Options — директива Apache, которая управляет возможностями директории.
- +Includes — знак «плюс» означает «включить возможность». Возможность называется
Includes(от англ. includes — «включения»).
Читается как: «к текущей директории и всем вложенным — включить серверные включения».
Некоторые хостинги запрещают директиву Options в .htaccess из соображений безопасности. Если сайт выдаст ошибку 500 — попробуйте убрать эту строку и оставить только AddOutputFilter. На Timeweb Options +Includes работает штатно.
Строка 8: AddOutputFilter INCLUDES .html .shtml
.htaccessAddOutputFilter INCLUDES .html .shtml
Если первая команда разрешила SSI «в принципе», то эта говорит: «применяй SSI к файлам с расширением .html и .shtml».
- AddOutputFilter — директива, которая «пропускает» ответ сервера через фильтр.
- INCLUDES — имя фильтра. Тот же SSI-движок.
- .html — все файлы с таким расширением обрабатывать.
- .shtml — и это тоже. S = server-parsed.
По умолчанию Apache обрабатывает SSI только у файлов .shtml. Это исторически сложившаяся практика: .shtml явно говорит серверу «тут есть SSI». Наши страницы — .html, и их нужно «научить» SSI через эту директиву.
Сервер получил бы запрос /index.html, увидел там SSI-директиву, решил, что это обычный HTML-комментарий, и отдал бы его браузеру как есть. Браузер тоже проигнорировал бы — комментарий же. И пользователь увидел бы пустое место вместо шапки.
Строка 9: ErrorDocument 404 /404.html
.htaccessErrorDocument 404 /404.html
Эта строка к SSI не относится — она про страницу ошибки. Если пользователь введёт несуществующий адрес, сервер покажет не стандартное «Not Found», а наш файл /404.html.
- ErrorDocument — директива «показать документ при ошибке».
- 404 — код ошибки «не найдено».
- /404.html — путь к файлу. Абсолютный, с ведущей косой чертой. Если написать просто 404.html, Apache не найдёт файл.
Нельзя писать ErrorDocument 404 https://secserpr.ru/404.html — в этом случае сервер отдаст страницу со статусом 200 OK. Поисковики воспримут это как «страница существует» и проиндексируют её как обычную. Правильный путь — локальный, от корня сайта: /404.html.
Что должно получиться в итоге
После сохранения .htaccess в корне сайта и обновления браузера с Ctrl+F5 — SSI начнёт работать.
До и послеДО .htaccess ПОСЛЕ .htaccess
--------------- ---------------
SSI-директива в HTML её содержимое вклеено:
(сервер её игнорирует, логотип, SVG, бургер,
отдаёт как комментарий) текст заголовка
Браузер видит Браузер видит
пустое место готовую шапку
Тест SSI: как проверить, что всё работает
Прежде чем строить сайт, убедимся, что сервер понимает SSI. Создайте в корне файл test.shtml со следующим содержимым:
<h1>Проверка SSI</h1>
<!--#echo var="DATE_LOCAL" -->
#echo — команда SSI, которая «печатает» значение переменной. Переменная DATE_LOCAL содержит текущую дату и время на сервере.
Откройте в браузере:
URLhttps://secserpr.ru/test.shtml
На странице увидите заголовок «Проверка SSI» и текущую дату с временем — например: Saturday, 12-Sep-2026 14:23:45 MSK. Это значит, сервер выполнил SSI-команду и подставил результат в HTML.
Проверьте три вещи: (1) файл называется именно test.shtml; (2) .htaccess лежит в корне; (3) подождите 1–2 минуты — Apache кэширует .htaccess, изменения могут примениться не сразу.
После успешной проверки test.shtml можно удалить — он больше не нужен.
Итог
- Две ключевые строки:
Options +IncludesиAddOutputFilter INCLUDES .html .shtml. - Первая — разрешает SSI. Вторая — распространяет его на .html-файлы.
- Третья строка (ErrorDocument) — про страницу 404, не про SSI, но удобно держать её в том же файле.
- SSI — серверная технология. Браузер уже получает готовый HTML, в котором все include раскрыты.
- Проверка — через test.shtml с командой #echo.
Теперь, когда сервер умеет собирать страницы из частей, можно создавать сами части — partials. Об этом следующий раздел.