Ir al contenido

Rewrite

El middleware Rewrite reescribe el path de la URL según las reglas proporcionadas. Es útil para compatibilidad hacia atrás o para crear enlaces más limpios y descriptivos.

Todo el middleware principal reside en el paquete middleware:

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

Los valores capturados en asteriscos pueden obtenerse por índice, por ejemplo $1, $2, etc. Cada asterisco es no-greedy (se traduce a un grupo de captura (.*?)); al usar múltiples asteriscos, un * final coincide con el resto del path.

e := echo.New()
e.Pre(middleware.RewriteWithConfig(middleware.RewriteConfig{}))

RewriteConfig · github.com/labstack/echo/v5@5196b9b

Las descripciones de los campos se generan a partir de comentarios del código fuente en inglés.

Campos del código fuente
CampoTipoDescripciónFuente
Skipper Skipper Skipper defines a function to skip middleware. L17
Rules map[string]string 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. L27
RegexRules map[*regexp.Regexp]string RegexRules defines the URL path rewrite rules using regexp.Rexexp 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", L34
Funciones del código fuente
TipoFuente
func Rewrite(rules map[string]string) echo.MiddlewareFunc L40
func RewriteWithConfig(config RewriteConfig) echo.MiddlewareFunc L49

Configuración por defecto:

NombreValor
SkipperDefaultSkipper

Para rewriting avanzado de paths, también se pueden definir reglas usando expresiones regulares. Los grupos de captura normales se pueden definir con () y referenciar por índice ($1, $2, …) en el path reescrito.

RegexRules y Rules normales se pueden combinar.

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",
},
}))