orange icon indicating copy to clipboard operation
orange copied to clipboard

URL重定向插件模板提取变量被转义

Open mousycoder opened this issue 7 years ago • 9 comments

针对Orange使用的提问, 对于简单几句话描述不清的问题, 请使用以下格式, 不符合格式或描述含糊不清的issue将不予回复。

需求或场景

URL被重定向中,参数里含有编码后的网址(http%3A%2F%2Fproxy.pay.xxx.com%2Fjmsresult.html),被重定向后,参数值不变。

使用的插件

URL重定向

具体的配置

image

期望的结果

http://proxy.xxx.com/newPayHandle?bankNo=1&bgUrl=http%3A%2F%2Fproxy.pay.xxx.com%2Fjmsresult.html&bizNo=000001098&clientIp=192.168.108.169&ext1=ext1&ext2=ext2&fgUrl=http%3A%2F%2Fproxy.pay.xxx.com%2Fjmsresult.html&orderAmt=1&orderId=201707071499408527140&orderTime=20160115165020&other1=other1&other2=other2&other3=other3&pageCharset=1&payType=W2&[email protected]&payerName=wqxhome&peerId=0x1p23M4j56789zz&productDesc=%E6%B5%8B%E8%AF%95%E5%95%86%E5%93%81&productName=%E6%B5%8B%E8%AF%95%E5%95%86%E5%93%81&version=v1.0&xlnumId=69551120&xunleiId=xlchannel&signMsg=fd6f8b8a7edee2de343e5c4b70ed7322

错误的结果

http://proxy.xxx.com/newPayHandle?bankNo=1&bgUrl=http://proxy.pay.xxx.com/jmsresult.html&bizNo=000001098&clientIp=192.168.108.169&ext1=ext1&ext2=ext2&fgUrl=http://proxy.pay.xxx.com/jmsresult.html&orderAmt=1&orderId=201707071499408527140&orderTime=20160115165020&other1=other1&other2=other2&other3=other3&pageCharset=1&payType=W2&[email protected]&payerName=wqxhome&peerId=0x1p23M4j56789zz&productDesc=%E6%B5%8B%E8%AF%95%E5%95%86%E5%93%81&productName=%E6%B5%8B%E8%AF%95%E5%95%86%E5%93%81&version=v1.0&xlnumId=69551120&xunleiId=xlchannel&signMsg=fd6f8b8a7edee2de343e5c4b70ed7322

mousycoder avatar Jul 07 '17 06:07 mousycoder

图片与描述不一致,请尽量保持一致。

noname007 avatar Jul 07 '17 06:07 noname007

你是想说编码有问题吗?

noname007 avatar Jul 07 '17 06:07 noname007

已经更正了,麻烦再看下~

mousycoder avatar Jul 07 '17 06:07 mousycoder

用索引式提取提取没问题,模板提取就出现这个问题

mousycoder avatar Jul 07 '17 06:07 mousycoder

参考下 #104

noname007 avatar Jul 07 '17 06:07 noname007

@sumory 不算是bug吧。算是文档说明的问题吧。

noname007 avatar Jul 07 '17 06:07 noname007

我没有细看,模板式提取默认使用的lua-resty-template,所以应该给用户一个开关,让用户选择是不是开启html转义比较好? @noname007

sumory avatar Jul 07 '17 06:07 sumory

感觉这样做意义不太大。在这个场景里面的内容没有被浏览器当做 html 去解析的机会, 最多也就做个url编码。

建议直接使用 {* *} 替代 {{}},orange 这里做的是个中间层,建议尽量是原样传递。

noname007 avatar Jul 07 '17 07:07 noname007

@mousycoder 按照 @noname007 的建议,使用{**}可以保留原参数格式,使用{{}}则会经过html转义。测试参考示例如下:

需求

原始URL为http://localhost:8000/test_tmpl?name=abc&a_url=http://abc.com?m=123&b_url=http://opq.com,我们希望能重定向这个请求到http://test.com上,同时想正常的传递a_url,也就是说a_url参数仍能正常保留“网址”格式。

配置

在dashboard上配置如下:

image

测试

在浏览器测试,发现访问原网址时被重定向到http://test.com/?new_name=abc&new_a_url=http://abc.com?m=123&new_b_url=http://opq.com,原参数a_url按照我们的配置保留了原网址格式并成功命名为new_a_url

结论

如以上实例,使用{query.a_url}则保留了原参数格式,而使用{{query.b_url}}则会经过转义,需要使用哪一种由用户自己适当选择即可。

sumory avatar Jul 08 '17 06:07 sumory