HAProxy重定向到子域

时间:2016-10-05 11:34:46

标签: url-redirection haproxy

我正在尝试重定向这些:

到这些:

但是努力学习文档和最好的方法。

*更新*

这就是我现在所做的工作。如果我传入:

然后重定向到:

...以及配置部分:

acl blog_page path_beg -i /blog
use_backend blog_site if blog_page
backend blog_site
reqrep        ^([^\ :]*)\ \/?(.*)\/blog\/?(.*)    \1\ /\2\3
redirect prefix http://blog.example.co.uk code 301

1 个答案:

答案 0 :(得分:1)

前端部分中的以下行将完成此重写和重定向。

为清晰起见,显示为多行,这必须全部显示在您的配置的一行

http-request redirect 
        code 301 
        location https://blog.example.com%[capture.req.uri,regsub(^/blog,)]  
        if { hdr(host) -i www.example.com } { path_beg /blog }

如果主机标头与www.example.com匹配且路径以博客开头,则重定向到以文字字符串https://blog.example.com开头的位置,然后连接通过获取请求URI(路径+查询字符串)和使用正则表达式替换从头开始删除/blog

验证:

$ curl -v 'http://www.example.com/blog/posts?which=this&that=1'
* Hostname was NOT found in DNS cache
*   Trying 127.0.0.1...
* Connected to www.example.com (127.0.0.1) port 80 (#0)
> GET /blog/posts?which=this&that=1 HTTP/1.1
> User-Agent: curl/7.35.0
> Host: www.example.com
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Content-length: 0
< Location: https://blog.example.com/posts?which=this&that=1

重定向位置似乎是正确的。

如果您想单独重定向http和https,则需要两行,每行测试一个附加条件,以确定原始请求是通过http还是https。

使用regsub()转换器需要HAProxy 1.6 +。