<-
Apache > HTTP 服务器 > 文档 > 版本 2.4 > 模块

Apache 模块 mod_substitute

可用语言:  en  |  fr 

描述对响应主体执行搜索和替换操作
状态扩展
模块标识符substitute_module
源文件mod_substitute.c
兼容性在 Apache HTTP Server 2.2.7 及更高版本中可用

摘要

mod_substitute 提供了一种机制,可以在响应主体上执行正则表达式和固定字符串替换。

Support Apache!

指令

错误修复清单

另请参阅

top

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 的一个常见用例是,前端服务器将请求代理到后端服务器,后端服务器返回包含硬编码嵌入式 URL 的 HTML,这些 URL 指向后端服务器。这些 URL 对最终用户不起作用,因为后端服务器无法访问。

在这种情况下,mod_substitute 可用于将这些 URL 重写为从前端工作的 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 响应来解决其余问题。

top

SubstituteInheritBefore 指令

描述更改继承模式的合并顺序
语法SubstituteInheritBefore on|off
默认SubstituteInheritBefore off
上下文目录,.htaccess
覆盖FileInfo
状态扩展
模块mod_substitute
兼容性在 httpd 2.4.17 及更高版本中可用

是否首先应用继承的 Substitute 模式(on),还是在当前上下文的模式之后(off)。SubstituteInheritBefore 本身是继承的,因此继承它的上下文(那些没有指定自己的 SubstituteInheritBefore 值的上下文)将应用最接近定义的合并顺序。

top

SubstituteMaxLineLength 指令

描述设置最大行大小
语法SubstituteMaxLineLength bytes(b|B|k|K|m|M|g|G)
默认SubstituteMaxLineLength 1m
上下文目录,.htaccess
覆盖FileInfo
状态扩展
模块mod_substitute
兼容性在 httpd 2.4.11 及更高版本中可用

mod_substitute 处理的最大行大小受到限制,以限制内存使用。可以使用 SubstituteMaxLineLength 配置限制。该值可以以字节数给出,并可以后缀一个字母 bBkKmMgG 来分别提供以字节、千字节、兆字节或吉字节为单位的大小。

示例

<Location "/">
    AddOutputFilterByType SUBSTITUTE text/html
    SubstituteMaxLineLength 10m
    Substitute "s/foo/bar/ni"
</Location>

可用语言:  en  |  fr 

top

评论

注意
这不是问答部分。此处放置的评论应指向有关改进文档或服务器的建议,如果这些评论已实施或被认为无效/偏离主题,则可能会被我们的版主删除。有关如何管理 Apache HTTP Server 的问题应发送到我们的 IRC 频道 #httpd(在 Libera.chat 上)或发送到我们的 邮件列表