2016-01-22 103 views
0

您好,感谢您提前帮忙。重定向到基于Haproxy路径的新域名

我在我的旧网站上有一个博客,我正试图使用​​haproxy将所有帖子重定向到他们在我的新网站上的新位置。例如,我想https://www.oldsite.com/john-blog/blogpost1被301重定向到https://www.newsite.com/jill-blog/blogpost1

https://www.oldsite.com/john-blog =>https://www.newsite.com/jill-blog

frontend https 
    option http-server-close 
    reqadd X-Forwarded-Proto:\ https 

    acl is_ob path_sub john-blog 

    redirect location https://www.newsite.com/jill-blog code 301 if is_ob 

我已经弄清楚如何转发流量/john-blog但一直无法弄清楚如何做重写,这样/john-blog/blogpost1旧网站301重定向到/jill-blog/blogpost1在新网站上。

回答

1

这是我能想出:

frontend https 
    option http-server-close 
    reqadd X-Forwarded-Proto:\ https 

    acl old_site hdr(host) -i www.oldsite.com 
    acl john_blog path_beg /john-blog 
    acl jill_blog path_beg /jill-blog 

    reqrep ^([^\ ]*\ /)john-blog(.*) \1jill-blog\2 if old_site john_blog 
    redirect prefix https://www.newsite.com code 301 if old_site jill_blog 

此配置的唯一缺点是,它也将重定向https://www.oldsite.com/jill-blog =>https://www.newsite.com/jill-blog。如果这是一个问题,我可以尝试找出其他的东西。

是如何工作

我将遵循和实例来https://www.oldsite.com/john-blog/blogpost1的请求。

在此示例中,acl old_site将为true,acl john_blog将为true,并且acl jill_blog将为false。

reqrep线替换john-blogjill-blog仅当old_sitejohn_blog的ACL都为真,这对于本实施例中是这样。在这一行之后,示例url将是https://www.oldsite.com/jill-blog/blogpost1

此时,acl john_blog现在不再成立,但acl jill_blog正如uri现在以/jill-blog开头。 acl old_site仍然如此。

redirect行在prefix mode其中重定向位置由附加的原始uri提供的字符串确定。在这个例子中,提供的字符串是https://www.newsite.com,并且附加的URI是/jill-blog/blogpost1,导致https://www.newsite.com/jill-blog/blogpost1的重标识url。

希望有所帮助。

+0

谢谢@JamesStewy。 – Jay

+0

@JamesStewy,我有一个类似的http重定向请求,但无法使其工作 - https://stackoverflow.com/questions/48583664/how-to-redirect-url-using-haproxy – newbie