在HAproxy中重定向URL而不使用尾部斜杠的最佳方法

问题描述 投票:0回答:1

重定向这些的最佳方法是什么?

http://example.com/testhttp://example.com/test/

(无论“测试”是什么,它都应该有效)。我是HAProxy的新手 - 我有不同的apache后端。它是否适用于此格式http://example.com/test/的URL,但无法使其他类型工作。尝试过:(1)

http-request set-path %[path]/ unless { path_end / }

它没有正确加载html页面 - 可能是因为它搞砸了,例如引用的JS文件。 (2)

http-request redirect code 301 prefix / drop-query append-slash if missing_slash

来自文档。我想我需要对此进行一些微调,但不知道从哪里开始。任何提示都将非常感激。

url-redirection haproxy
1个回答
0
投票

这可能最好在后端完成,因为只有后端才能真正知道应该重定向哪些路径。但是,应该可以从HAProxy获得。

无论“测试”是什么,它都应该有效

我怀疑这正是你所需要的,因为那时(例如)/css/common.css变成了/css/common.css/,这是错误的。

我倾向于认为你想要这样的东西:

http-request redirect code 301 prefix / drop-query append-slash if { path_reg /[^/\.]+$ }

重定向到同一路径,删除查询并将/附加到末尾,如果路径以/结尾,后跟至少1个(或更多)字符既不是/也不是.

这应该将/test重定向到/test//hello/world/hello/world/,但它应该留下像/js/example.js/images/cat.png/favicon.ico这样的路径不受影响。

更深的嵌套也应该正常工作,因为这样的正则表达式要么找到匹配,要么不找到匹配,并且此表达式仅考虑路径中最终斜杠之后的任何内容。如果它包含一个点或什么都没有,那么就没有匹配,这似乎是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.