根据 Haproxy 中的路径重定向到新域
Redirect to new domain based on path in Haproxy
您好,提前感谢您的帮助。
我的旧网站上有一个博客,我正在尝试使用 haproxy 将所有帖子 301 重定向到新网站上的新位置。比如我要https://www.oldsite.com/john-blog/blogpost1 to be 301 redirected to 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
在新网站上。
这是我能够想出的:
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(.*) jill-blog 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
,导致 https://www.newsite.com/jill-blog/blogpost1
.
的重写 url
希望对您有所帮助。
您好,提前感谢您的帮助。
我的旧网站上有一个博客,我正在尝试使用 haproxy 将所有帖子 301 重定向到新网站上的新位置。比如我要https://www.oldsite.com/john-blog/blogpost1 to be 301 redirected to 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
在新网站上。
这是我能够想出的:
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(.*) jill-blog 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
,导致 https://www.newsite.com/jill-blog/blogpost1
.
希望对您有所帮助。