Spec-Zone.ru › Apache HTTP Server

Модуль 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API