重定向这些
的最佳方法是什么http://example.com/test至http://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
来自文档。我想我需要对此进行一些微调,但不知道从哪里开始。任何提示都会非常感激。
答案 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}之类的路径不受影响。
更深的嵌套也应该正常工作,因为像这样的正则表达式要么匹配要么不要,并且此表达式只考虑路径中最后斜杠之后的任何内容。如果它包含一个点或什么都没有,那么就没有匹配,这似乎是正确的。