在Nginx sub_filter中使用正则表达式

hjqgdpho  于 8个月前  发布在  Nginx
关注(0)|答案(1)|浏览(240)

我试图删除HTML内容中的特定属性的内容,同时使用nginx代理中的sub_filter模块。
这是我试图删除其内容的属性的一个示例:

integrity="sha256-JcCQTfQJfXQCI9Pgu4C8DsPBm7t6k/3SvAXTFPsXuBk= sha512-l4H3xn9koLbrXcevxo6Hs0TnepFHVLGgQM9tUMgsYxLDsyfVzWen1sqgozMDp1hh7dF1aR3bhNTp+jjrEBTIIA=="

到目前为止,我已经尝试了不同的正则表达式的变体,它们应该可以工作,但实际上在nginx中不工作,例如这个:
sub_filter integrity=".*?" integrity="";
我的方法错了吗?如何在nginx中实现此任务?

csga3l58

csga3l581#

你的方法没有错,但是你使用的正则表达式模式对nginx中的sub_filter模块无效。sub_filter使用PCRE正则表达式语法,模式完整性=".?“不是有效的PCRE。
其内容将是:
integrity="(?.
?)=(?.?)”
此模式将匹配整个完整性属性,包括名称、sha 256校验和的值和sha 512校验和的值。
(?.
?)和(?.?)捕获组将捕获sha 256和sha 512校验和的值
然后,可以使用sub_filter指令将整个完整性属性替换为空字符串:
sub_filter integrity="(?.
?)=(?.*?)";这将有效地从HTML内容中删除完整性属性。
例如:

server {
  listen 80;
  server_name example.com;

  location / {
    proxy_pass http://localhost:8080;
    sub_filter integrity="(?<sha256>.*?)=(?<sha512>.*?)" "";
  }
}

这将把所有请求代理到localhost:8080的服务器。

相关问题