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

时间:2018-03-04 11:56:03

标签: url-redirection haproxy

重定向这些

的最佳方法是什么

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

(无论“测试”是什么,都应该有效)。我是HAProxy的新手 - 我有不同的apache后端。让它适用于此格式http://example.com/test/的网址但无法使其他类型工作。 试过: (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

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

1 个答案:

答案 0 :(得分:0)

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

  无论什么"测试"它应该工作。是

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

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

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

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

这应该将.重定向到/test,将/test/重定向到/hello/world,但它应该保留/hello/world//js/example.js以及{{1}之类的路径不受影响。

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