mbs654321 发表于 2025/1/12 02:02

kangle的url_write目录重写是否有bug?

参考:https://bbs.itzmx.com/forum.php?mod=viewthread&tid=86574&fromuid=1
我希望将http、ws请求转发到另一个域名下的https和wss上

这样设置以后,要不就是请求被转发到了http://a.com/speech/https%3A//b.com下,要不就是请求没有升级为ws,这两种里面随机选择一种发生
是我哪里理解有误吗?要实现这种带有路径重写的反代是否还有其他手段?

小樱 发表于 2025/1/12 05:34

没有bug,从图上看你的规则写法有问题
看起来你是要把规则反转过来吗?用 a.com/imgs/ 输出b.com的数据,并且b为https?
imgs/(.*)$
https://b.com/$1

此时a.com的ws或者http都应该可以正常工作,你试一下

还有个简易版的rewrite重写模块,能够直接列举出path目录路径,可能更适合不太了解正则表达式写法的人群
https://bbs.itzmx.com/thread-98915-1-1.html
https://bbs.itzmx.com/thread-98564-1-1.html

mbs654321 发表于 2025/1/12 11:14

小樱 发表于 2025/1/12 05:34
没有bug,从图上看你的规则写法有问题
看起来你是要把规则反转过来吗?用 a.com/imgs/ 输出b.com的数据, ...

谢谢小樱,但小樱原来的写法也有些问题,url_rewrite匹配整个url,所以开头不应该用^,不然匹配不到了
但我觉得我原来的写法应该也能匹配,(http|ws)应该可以捕获http协议头,后面$1s表示https,kangle是不支持用变量描述协议头吗?
我刚刚试了一下,下面两种匹配似乎效果不一样
a.com(.*) => b.com$1
a.com/(.*) => b.com/$1
只有后者能正常工作,对于前者,如果直接访问a.com,会转发到a.com/b.com上,导致404。但问题是有时候访问并不会特意在下面加上一个斜杠
我之前也考虑过rewrite模块,但有两个问题,一个是一直不知道prefix的具体作用,另一个就是,即便我勾选了internal选项并将目标设置为代理,我去访问的时候仍然会出现302重定向而不是我期望的反代

小樱 发表于 2025/1/12 18:28

mbs654321 发表于 2025/1/12 11:14
谢谢小樱,但小樱原来的写法也有些问题,url_rewrite匹配整个url,所以开头不应该用^,不然匹配不到了
...

kangle主要底层核心是c++开发的,一些模块是c和go,对于重写模块要用c的正则表达式,可以在这里测试效果,不同语言用的正则不一样,所以可能会有所不同,可以在flavor选择C#,检查group值是否符合预期,也就是$1,$2
https://regex101.com/
尾部不加/的话,会导致一些特殊路径处理出现问题,比如说本来要的是imgs,但是imgs123也会命中,然后就变成了https://b.com123,不但imgs会丢失,而且会引起目标域名错误,所以一般来说尾部要加个/确保目录正确

正则开头确实不需要加^,大半夜的打着游戏切屏记错了多打了个^,那我去帖子上编辑把开头^删除了
所以测试能成功吗?ws理论上是在http的基础上进行101协议升级到ws的,应该直接就支持了

mbs654321 发表于 2025/1/13 10:14

小樱 发表于 2025/1/12 18:28
kangle主要底层核心是c++开发的,一些模块是c和go,对于重写模块要用c的正则表达式,可以在这里测试效 ...

是的,用url_rewrite模块可以正常工作{:3346:}
页: [1]
查看完整版本: kangle的url_write目录重写是否有bug?