【问题标题】:Redirect to new domain based on path in Haproxy根据 Haproxy 中的路径重定向到新域
【发布时间】:2016-01-28 11:20:42
【问题描述】:

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

我在旧网站上有一个博客,我正在尝试使用 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

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

【问题讨论】:

    标签: url-rewriting rewrite haproxy


    【解决方案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 为真,acl john_blog 为真,acl jill_blog 为假。

    仅当old_site 和john_blog acls 都为真时,reqrep 行才会将john-blog 替换为jill-blog,在本示例中就是这种情况。在这一行之后,示例 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,从而导致重新编辑 url 为 https://www.newsite.com/jill-blog/blogpost1。

    希望对您有所帮助。

    【讨论】:

    猜你喜欢
    • 2019-07-16
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 2017-01-30
    • 2017-02-13
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    相关资源
    最近更新 更多