Модуль 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не сплющивать результаты после каждой замены. Это может привести к значительно более быстрому ответу и снижению использования памяти, но следует использовать только в том случае, если результат одной замены никогда не будет совпадать с шаблоном или регулярным выражением последующей замены.
Подстановка substitution может содержать текстовые литералы и обратные ссылки регулярных выражений.
Пример
<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