| 描述: | 在响应正文上执行搜索和替换操作 |
|---|---|
| 状态: | 延期 |
| 模块标识符: | 替代模块 |
| 源文件: | mod_substitute.c |
| 兼容性: | 在Apache HTTP Server 2.2.7和更高版本中可用 |
mod_substitute 提供了一种在响应主体上执行正则表达式和固定字符串替换的机制。
| 描述: | 用于过滤响应内容的模式 |
|---|---|
| 句法: | Substitute s/pattern/substitution/[infq] |
| 内容: | 目录.htaccess |
| 覆写: | 文件信息 |
| 状态: | 延期 |
| 模块: | mod_substitute |
该Substitute指令规定了适用于响应正文搜索和替换模式。
可以通过使用以下标志的任意组合来修改模式的含义:
inn标志会强制将模式视为固定字符串。ff标志使mod_substitute替换的结果变平,允许以后在该替换的边界上进行替换。这是默认值。qq标志将导致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是前端服务器代理请求到后端服务器,该服务器返回带有硬编码嵌入式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 |
| 覆写: | 文件信息 |
| 状态: | 延期 |
| 模块: | mod_substitute |
| 兼容性: | 在httpd 2.4.17及更高版本中可用 |
是Substitute
先(on)还是在当前上下文(off)之后应用继承的模式。
SubstituteInheritBefore本身是继承的,因此继承它的上下文(未指定其自身SubstituteInheritBefore值的上下文
)将应用最接近的已定义合并顺序。
| 描述: | 设置最大行大小 |
|---|---|
| 句法: | SubstituteMaxLineLength bytes(b|B|k|K|m|M|g|G) |
| 默认: | SubstituteMaxLineLength 1m |
| 内容: | 目录.htaccess |
| 覆写: | 文件信息 |
| 状态: | 延期 |
| 模块: | 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>