Apache HTTP Server 版本 2.4

| 描述 | 对响应主体执行搜索和替换操作 |
|---|---|
| 状态 | 扩展 |
| 模块标识符 | substitute_module |
| 源文件 | mod_substitute.c |
| 兼容性 | 在 Apache HTTP Server 2.2.7 及更高版本中可用 |
mod_substitute 提供了一种机制,可以在响应主体上执行正则表达式和固定字符串替换。
| 描述 | 用于过滤响应内容的模式 |
|---|---|
| 语法 | Substitute s/pattern/substitution/[infq] |
| 上下文 | 目录,.htaccess |
| 覆盖 | FileInfo |
| 状态 | 扩展 |
| 模块 | mod_substitute |
Substitute 指令指定要应用于响应主体的搜索和替换模式。
可以使用任何组合的这些标志来修改模式的含义
inn 标志强制模式被视为固定字符串。ff 标志导致 mod_substitute 展平替换结果,允许后续替换发生在这个替换的边界上。这是默认值。qq 标志导致 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
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 on|off |
| 默认 | SubstituteInheritBefore off |
| 上下文 | 目录,.htaccess |
| 覆盖 | FileInfo |
| 状态 | 扩展 |
| 模块 | mod_substitute |
| 兼容性 | 在 httpd 2.4.17 及更高版本中可用 |
是否首先应用继承的 Substitute 模式(on),还是在当前上下文的模式之后(off)。SubstituteInheritBefore 本身是继承的,因此继承它的上下文(那些没有指定自己的 SubstituteInheritBefore 值的上下文)将应用最接近定义的合并顺序。
| 描述 | 设置最大行大小 |
|---|---|
| 语法 | 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>