更改http响应中的位置

时间:2016-02-18 11:11:34

标签: regex http http-headers http-status-code-301 haproxy

访问https://myexample.com/adminui/服务器发送303时,我在浏览器中收到响应,如下所示

http://uaa.devtest3.io/oauth/authorize?response_type=code&client_id=admin_ui_client&redirect_uri=https://admin.devtest3.io/login

我希望它能改变它

http://myexample.com/oauth/authorize?response_type=code&client_id=admin_ui_client&redirect_uri=https://myexample.com/adminui/login

我在haproxy.config文件中尝试了以下条目,但这不起作用。

resirep ^Location:\ http://uaa.devtest3.io/oauth/authorize?response_type=code&client_id=admin_ui_client&redirect_uri=https://admin.devtest3.io/login   Location:\ http://myexample.com/uaa/oauth/authorize?response_type=code&client_id=admin_ui_client&redirect_uri=https://myexample.com/adminui/login

已更新 我需要进一步帮助改变

https://uaa.devtest3.io/login;jsessionid=4A0ADA8DDB7CD09C2B50F4A41945BBDB to https://myexample.com/uaa/login;jsessionid=4A0ADA8DDB7CD09C2B50F4A41945BBDB

我试过这个

rspirep ^Location:\ (https?://uaa.devtest3.io;jsessionid=([0-9A-Z](.*) )Location:\ myexample.com \3 if hdr_location

这不起作用。我觉得正在使用的正则表达式是错误的。我不是这个正则表达的诗句。 请指导我这个

1 个答案:

答案 0 :(得分:1)

首先,就我所知,resirep命令似乎不存在。我认为你需要的命令是rspirep。其次,如果您使用的是HAProxy 1.5或更低版本,则需要转义/&?以及空格。

产生的配置:

rspirep ^Location:\ http:\/\/uaa.devtest3.io\/oauth\/authorize\?response_type=code\&client_id=admin_ui_client\&redirect_uri=https:\/\/admin.devtest3.io\/login   Location:\ http:\/\/myexample.com\/uaa\/oauth\/authorize\?response_type=code\&client_id=admin_ui_client\&redirect_uri=https:\/\/myexample.com\/adminui\/login

希望有所帮助。

更新*已修复

rspirep ^Location:\ https:\/\/uaa.devtest3.io\/login;jsessionid=([0-9A-Z]*)   Location:\ https:\/\/myexample.com\/uaa\/login;jsessionid=\1

([0-9A-Z]*) - 匹配并捕获包含大写字母和数字的任意长度的字符串。

\1 - 将第一个捕获的字符串放在此处

*在HAProxy 1.5.15中测试。