如何在 NGINX 中正确配置 sub_filter?

如何在 NGINX 中正确配置 sub_filter?

我在正确设置格式方面遇到了一些麻烦。我想使用 sub_filter 在所有页面中插入 CloudFlare 脚本:

sub_filter '</BODY>'
'<script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "aaabbbccc55dd"}'></script>
</BODY>
';

谁能帮我理清各种单引号和双引号,以便可以正常工作?(或者有什么办法可以摆脱它们?)

答案1

Nginxngx_http_sub_module模块语法是:

sub_filter string replacement;

在 nginx 中,字符串可以不带引号输入,除非它们包含空格、分号或花括号。当这些字符存在时,需要用反斜杠进行转义,或者将字符串括在单引号/双引号中。(除非转义,否则引号字符串中的变量将被扩展$。)

因此,您可以简单地转义空格(并且不要引用字符串):

sub_filter </BODY> <script\ defer\ src="https://static.cloudflareinsights.com/beacon.min.js"\ data-cf-beacon='{"token":\ "aaabbbccc55dd"}'></script>\ </BODY>;

转义引号应该是多余的,但这样做也不会有害:

sub_filter </BODY> <script\ defer\ src=\"https://static.cloudflareinsights.com/beacon.min.js\"\ data-cf-beacon='\{\"token\":\ \"aaabbbccc55dd\"}\'></script>\ </BODY>;

\或者,您可以用单引号或双引号来引用字符串,然后当它们出现在字符串中时,用 来转义这些单引号或双引号(用):

sub_filter '</BODY>' '<script defer src=\'https://static.cloudflareinsights.com/beacon.min.js\' data-cf-beacon=\'{"token": "aaabbbccc55dd"}\'></script> </BODY>';
sub_filter "</BODY>" "<script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{\"token\": \"aaabbbccc55dd\"}'></script> </BODY>";

相关内容