nginx subs_filter正则

2025-03-26 22

Image

nginx subs_filter正则

解决方案

Nginx的subsfilter模块可以用于在响应内容中替换指定字符串,支持正则表达式匹配。它常用于修改后端返回的内容,例如更改HTML中的特定链接、文本等。介绍如何使用subsfilter结合正则表达式来实现精准的内容替换。

一、配置基础环境

确保Nginx已安装并启用了subs_filter模块。可以通过以下命令检查:
bash
nginx -V 2>&1 | grep -- '--with-http_sub_module'

如果未启用该模块,在编译Nginx时需要添加--with-http_sub_module参数重新编译。

二、基本用法示例

假设我们要将页面中所有的“旧域名”替换为“新域名”。

1. 简单字符串替换

nginx
location / {
subs_filter 'old-domain.com' 'new-domain.com';
subs_filter_types text/html;
}

2. 使用正则表达式替换(非贪婪匹配)

当遇到更复杂的情况时,如只替换特定位置或格式的内容:
nginx
location / {
# 替换所有形如 http(s)://old-domain.com/.* 的URL
subs_filter '(https?://)old-domain.com(/.*)?' '$1new-domain.com$2' ir;
subs_filter_types text/html;
}

- i:忽略大小写
- r:表示模式是正则表达式
- g:全局替换(可选)

三、高级应用技巧

1. 多个规则组合

当需要同时处理多个替换需求时:
```nginx
location / {
# 定义多个过滤规则
set $rules '';
if ($request_uri ~* ".(html|htm)$") {
set $rules '1';
}

# 根据条件应用不同规则
if ($rules = '1') {
    subs_filter 'old-text' 'new-text' ir;
    subs_filter 'example-old' 'example-new' ir;
}
subs_filter_types text/html;

}
```

2. 避免无限循环

在某些情况下可能会出现递归替换导致死循环的问题。可以通过限制替换次数来避免:
nginx
location / {
# 最多执行5次替换
subs_filter 'pattern' 'replacement' irg;
subs_filter_once off;
subs_filter_max_attempts 5;
subs_filter_types text/html;
}

以上就是关于Nginx subs_filter模块配合正则表达式的常见用法和注意事项。根据实际应用场景选择合适的配置方式,能够灵活地对响应内容进行定制化修改。

(本文来源:https://www.nzw6.com)

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!cheeksyu@vip.qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有积分奖励和额外收入!
5.严禁将资源用于任何违法犯罪行为,不得违反国家法律,否则责任自负,一切法律责任与本站无关