我正在尝试使用以下内容重写代理页面的正文链接:
sub_filter http://proxied.page.come http://local.page.com;
sub_filter_once off;
这是要走的路吗?sub_filter 模块和substitutes_filter有什么区别
也可以在 sub_filter 声明中使用变量吗?
我正在尝试使用以下内容重写代理页面的正文链接:
sub_filter http://proxied.page.come http://local.page.com;
sub_filter_once off;
这是要走的路吗?sub_filter 模块和substitutes_filter有什么区别
也可以在 sub_filter 声明中使用变量吗?
这是在代理页面上重写链接的一种完全有效的方法。“该模块是一个过滤器,它通过将一个指定的字符串ngx_http_sub_module
替换为另一个来修改响应”(单次替换)
第三方nginx_substitutions_filter
是一个过滤器模块,它可以对响应体进行正则表达式和固定字符串替换
所以第三方模块可以用来替换多个字符串,使用正则表达式和变量。例如:
subs_filter_types text/css text/xml;
subs_filter http(s)?://(www.)?proxied.page.com/ http$1://$http_host/ r;
subs_filter http(s)?://(www.)?proxied2.page.com/ http$1://$http_host/ r;
理想情况下,您应该要求后端编写正确的链接。虽然可以使用子过滤器修复一些简单的情况,但这通常是不可能的(例如,如果返回的数据不是文本,而是例如闪存代码)。
您可以在 sub_filter 的替换字符串中使用变量(但不能在原始响应中匹配的字符串中),它已明确记录:
替换字符串可以包含变量。
至于 subs 过滤器 - 它是一个 3rd 方模块,预计会更强大,但可能包含更多错误。只要标准子过滤器对您来说就足够了 - 您可能不想使用 3rd 方子过滤器。