根据 Haproxy 中的路径重定向到新域

Jay*_*Jay 2 rewrite url-rewriting haproxy

您好,提前感谢您的帮助。

我在旧网站上有一个博客,我正在尝试使用 haproxy 将所有帖子重定向到新网站上的新位置 301。例如,我希望 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
Run Code Online (Sandbox Code Playgroud)

我已经弄清楚如何转发流量,/john-blog但无法弄清楚如何进行重写,以便/john-blog/blogpost1在旧站点 301s/jill-blog/blogpost1上到新站点。

Jam*_*ewy 6

这是我能够想出的:

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
Run Code Online (Sandbox Code Playgroud)

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

工作原理

我将遵循和示例请求https://www.oldsite.com/john-blog/blogpost1.

在这个例子中,aclold_site为真,acljohn_blog为真,acljill_blog为假。

仅当 the和acls 都为真时,该reqrep行才替换为john-blogwith ,在本例中就是这种情况。在这一行之后,示例 url 将是.jill-blogold_sitejohn_bloghttps://www.oldsite.com/jill-blog/blogpost1

在这一点上,acljohn_blog现在不再是真的,但 acljill_blog是因为 uri 现在以/jill-blog. aclold_site仍然是正确的。

该redirect行处于前缀模式,其中重定向位置由附加了原始 uri 的提供的字符串确定。在此示例中,提供的字符串是https://www.newsite.com,附加的 uri/jill-blog/blogpost1导致https://www.newsite.com/jill-blog/blogpost1.

希望有帮助。