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上到新站点。
这是我能够想出的:
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.
希望有帮助。
| 归档时间: |
|
| 查看次数: |
13547 次 |
| 最近记录: |