Rewrite
O middleware Rewrite reescreve o caminho da URL com base nas regras fornecidas. Ele é útil para compatibilidade retroativa ou para criar links mais limpos e descritivos.
Todo o middleware principal fica no pacote 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",}))Os valores capturados em asteriscos podem ser recuperados por índice, por exemplo $1, $2 e assim por diante. Cada
asterisco é non-greedy (traduzido para um grupo de captura (.*?)); ao usar vários asteriscos,
um * final corresponde ao restante do caminho.
Configuração customizada
Seção intitulada “Configuração customizada”e := echo.New()e.Pre(middleware.RewriteWithConfig(middleware.RewriteConfig{}))Configuração
Seção intitulada “Configuração”RewriteConfig · github.com/labstack/echo/v5@5196b9b
As descrições dos campos são geradas dos comentários do código-fonte em inglês.
| Campo | Tipo | Descrição | Código |
|---|---|---|---|
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 |
Configuração padrão:
| Nome | Valor |
|---|---|
| Skipper | DefaultSkipper |
Regras baseadas em regex
Seção intitulada “Regras baseadas em regex”Para reescrita avançada de caminhos, as regras também podem ser definidas usando expressões regulares. Grupos
de captura normais podem ser definidos com () e referenciados por índice ($1, $2, …) no
caminho reescrito.
RegexRules e Rules normais podem ser combinados.
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", },}))