regex - Nginx 去除 URL 参数
问题描述
我想在将其发送到 proxy_pass 之前剥离 url 参数
对于访问者请求网址:=> https://example.com/?wanted1=aaa&unwanted1=bbb&unwanted2=ccc&wanted2=ddd
然后它将所有不需要的参数剥离到:=> https://example.com/?wanted1=aaa&wanted2=ddd
我现在的方式是这样的:
if ($args ~ ^(.*)&(?:unwanted1|unwanted2)=[^&]*(&.*)?$ ) {
set $args $1$2;
}
但它只删除 1 个参数并且从不进行递归。如何解决这个问题?我想修改 $args。
解决方案
如果你想要递归,你可以在一个块中使用rewrite...last
from 。location
Nginx 在产生内部服务器错误之前只会容忍少量的递归(可能是十次迭代)。
例如:
location / {
if ($args ~ ^(?<prefix>.*)&(?:unwanted1|unwanted2)=[^&]*(?<suffix>&.*)?$ ) {
rewrite ^ $uri?$prefix$suffix? last;
}
...
}
请注意,您需要使用命名捕获,因为在rewrite
评估语句时会重置编号的捕获。
请注意,这rewrite
需要尾随?
以防止将现有参数附加到重写的 URI。有关详细信息,请参阅此文档。
推荐阅读
- python - 加入多个大型列表的最有效方法
- php - jQuery AJAX Onchange 重定向问题
- r - 将“for循环”翻译成“purr::map”
- java - Spring Boot:多次调用@Bean方法
- asp.net-core - 显示(值)DataAnnotations - Swashbuckle - Swagger 页面
- python - 基于 linspace 的重复行 x 次数:np.linspace(RFMIn, RFMax, 10)
- r - 用于计算数据月差的 Map() 函数 - R 中的 data.table
- angular - 在创建 NG_VALUE_ACCESSOR 时 forwardRef 是强制性的
- python - 无法抓取产品状态
- audio-processing - 将两个音频与相似部分对齐