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