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

Подстановка 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

Spec-Zone.ru

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