跳转到内容

重写

Rewrite 中间件会根据提供的规则重写 URL 路径。它有助于保持向后兼容,或创建更简洁、 更具描述性的链接。

e.Pre(middleware.Rewrite(map[string]string{
"/old": "/new",
"/api/*": "/$1",
"/js/*": "/public/javascripts/$1",
"/users/*/orders/*": "/user/$1/order/$2",
}))

星号捕获的值可以按索引获取,例如 $1$2 等。每个星号都是非贪婪的 (转换为捕获组 (.*?));使用多个星号时,尾随 * 会匹配路径剩余部分。

e := echo.New()
e.Pre(middleware.RewriteWithConfig(middleware.RewriteConfig{}))
type RewriteConfig struct {
// Skipper defines a function to skip middleware.
Skipper Skipper
// Rules defines the URL path rewrite rules. The values captured in asterisk can be
// retrieved by index e.g. $1, $2 and so on.
// Example:
// "/old": "/new",
// "/api/*": "/$1",
// "/js/*": "/public/javascripts/$1",
// "/users/*/orders/*": "/user/$1/order/$2",
// Required.
Rules map[string]string
// RegexRules defines the URL path rewrite rules using regexp.Regexp with captures.
// Every capture group in the values can be retrieved by index e.g. $1, $2 and so on.
// Example:
// "^/old/[0.9]+/": "/new",
// "^/api/.+?/(.*)": "/v2/$1",
RegexRules map[*regexp.Regexp]string
}

默认配置:

名称
SkipperDefaultSkipper

对于路径的高级重写,也可以使用正则表达式定义规则。可以用 () 定义普通捕获组, 并在重写后的路径中按索引引用($1$2 等)。

RegexRules 可以和普通 Rules 组合使用。

e.Pre(middleware.RewriteWithConfig(middleware.RewriteConfig{
Rules: map[string]string{
"^/v1/*": "/v2/$1",
},
RegexRules: map[*regexp.Regexp]string{
regexp.MustCompile("^/foo/([0-9].*)"): "/num/$1",
regexp.MustCompile("^/bar/(.+?)/(.*)"): "/baz/$2/$1",
},
}))