Модуль Apache mod_substitute
| Описание: | Выполнение операций поиска и замены в телах ответов |
|---|---|
| Статус: | Расширение |
| Идентификатор модуля: | substitute_module |
| Исходный файл: | mod_substitute.c |
| Совместимость: | Доступен в Apache HTTP Server 2.2.7 и более поздних версиях |
Обзор
mod_substitute предоставляет механизм для замены в телах ответов с использованием регулярных выражений и фиксированных строк.
Директива Substitute
| Описание: | Шаблон для фильтрации содержимого ответа |
|---|---|
| Синтаксис: | Substitute s/pattern/substitution/[infq] |
| Контекст: | каталог, .htaccess |
| Переопределение: | FileInfo |
| Статус: | Расширение |
| Модуль: | mod_substitute |
Директива Substitute задаёт шаблон поиска и замены, применяемый к телу ответа.
Значение шаблона можно изменить, используя любую комбинацию следующих флагов:
i- Выполнять сопоставление без учёта регистра.
n- По умолчанию шаблон интерпретируется как регулярное выражение. Флаг
nзаставляет интерпретировать шаблон как фиксированную строку. f- Флаг
fзаставляетmod_substituteсводить результат замены, позволяя выполнять последующие замены на её границе. Это поведение используется по умолчанию. q- Флаг
qзаставляетmod_substituteне сводить корзины после каждой замены. Это может значительно ускорить обработку ответа и уменьшить использование памяти, но этот флаг следует использовать только в том случае, если результат одной замены не может совпасть с шаблоном или регулярным выражением последующей замены.
Строка замены может содержать текст и обратные ссылки на группы регулярного выражения
Пример
<Location "/">
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s/foo/bar/ni"
</Location> Символ, используемый для разделения различных частей строки замены, называется «разделителем»; чаще всего для этой цели используется косая черта.
Если шаблон или строка замены содержат символ косой черты, можно использовать другой разделитель, чтобы сделать директиву более понятной:
Пример использования альтернативного разделителя
<Location "/">
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|<BR */?>|<br />|i"
</Location> При использовании регулярных выражений в сравнении и строке замены можно использовать обратные ссылки, как показано в следующем примере:
Пример использования обратных ссылок и захватывающих групп
<Location "/">
AddOutputFilterByType SUBSTITUTE text/html
# "foo=k,bar=k" -> "foo/bar=k"
Substitute "s|foo=(\w+),bar=\1|foo/bar=$1|"
</Location> Распространённый сценарий использования mod_substitute — это ситуация, когда фронтенд-сервер проксирует запросы к бэкенд-серверу, который возвращает HTML с жёстко заданными встроенными URL-адресами, указывающими на бэкенд-сервер. Эти URL-адреса не работают для конечного пользователя, поскольку бэкенд-сервер недоступен.
В этом случае mod_substitute можно использовать для переписывания этих URL-адресов в формат, который будет работать со стороны фронтенда:
Переписывание URL-адресов во встроенном проксируемом содержимом
ProxyPass "/blog/" "http://internal.blog.example.com/" ProxyPassReverse "/blog/" "http://internal.blog.example.com/" Substitute "s|http://internal.blog.example.com/|http://www.example.com/blog/|i"
ProxyPassReverse изменяет все заголовки Location (перенаправления), отправленные бэкенд-сервером, а в этом примере Substitute решает оставшуюся часть проблемы, исправляя также HTML-ответ.
Директива SubstituteInheritBefore
| Описание: | Изменение порядка объединения унаследованных шаблонов |
|---|---|
| Синтаксис: | SubstituteInheritBefore on|off |
| По умолчанию: | SubstituteInheritBefore off |
| Контекст: | каталог, .htaccess |
| Переопределение: | FileInfo |
| Статус: | Расширение |
| Модуль: | mod_substitute |
| Совместимость: | Доступна в httpd 2.4.17 и более поздних версиях |
Определяет, применять ли сначала унаследованные шаблоны Substitute (on) или после шаблонов текущего контекста (off). Параметр SubstituteInheritBefore также наследуется, поэтому контексты, в которых он унаследован (то есть не задано собственное значение SubstituteInheritBefore), используют ближайший определённый порядок объединения.
Директива SubstituteMaxLineLength
| Описание: | Установка максимальной длины строки |
|---|---|
| Синтаксис: | SubstituteMaxLineLength bytes(b|B|k|K|m|M|g|G) |
| По умолчанию: | SubstituteMaxLineLength 1m |
| Контекст: | каталог, .htaccess |
| Переопределение: | FileInfo |
| Статус: | Расширение |
| Модуль: | mod_substitute |
| Совместимость: | Доступна в httpd 2.4.11 и более поздних версиях |
Максимальная длина строки, обрабатываемой mod_substitute, ограничена для снижения использования памяти. Ограничение можно настроить с помощью SubstituteMaxLineLength. Значение задаётся в байтах и может сопровождаться одной буквой b, B, k, K, m, M, g, G, указывающей размер в байтах, килобайтах, мегабайтах или гигабайтах соответственно.
Пример
<Location "/">
AddOutputFilterByType SUBSTITUTE text/html
SubstituteMaxLineLength 10m
Substitute "s/foo/bar/ni"
</Location>
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_substitute.html