Configure regras de reescrita de URL nos nós de borda do ESA para modifique o caminho da solicitação e a query string durante requisições à origem. Migre caminhos do servidor de origem sem alterar as URLs voltadas ao usuário ou as configurações de frontend.
Casos de uso típicos
Migração de origem: O caminho do arquivo na origem é ajustado, mas você deseja manter o caminho de acesso do usuário inalterado.
Adaptação de versão de API: Reescreva caminhos de versões antigas da API para a nova versão.
Padronização de parâmetros: Unifique formatos de parâmetros enviados por diferentes clientes.
URL limpa: Mapeie caminhos complexos de backend para caminhos simples e amigáveis ao usuário.
Como funciona
Quando o ESA executa uma tarefa de prefetch de cache enviada por um cliente, as regras de reescrita de URL não se aplicam à URL de prefetch.
A reescrita de URL aplica-se apenas durante requisições à origem e não afeta o pipeline de processamento interno do ESA. A chave de cache é gerada a partir da URL original; portanto, a correspondência de cache permanece inalterada. A URL reescrita é usada exclusivamente nas requisições à origem.
Fluxo de execução
Verificação de cache: O nó de borda consulta o cache usando a URL original. Em caso de cache miss, as regras de reescrita transformam a URL no caminho de destino.
Requisição à origem: A URL reescrita é enviada ao servidor de origem. A resposta é armazenada em cache usando a URL original como chave.
Retorno do conteúdo em cache: O conteúdo armazenado é retornado ao cliente.
Ordem de execução
A reescrita de URL ocorre após a verificação de cache e a seleção da origem, mas antes da modificação dos cabeçalhos de requisição à origem. O caminho é ajustado depois que o destino da origem é determinado, sem afetar o processamento dos cabeçalhos.
Configurar regras de reescrita de URL
No console do ESA, selecione Websites e, na coluna Websites, clique em no site desejado.
No painel de navegação à esquerda, escolha .
-
Na seção Rules, clique em Transform Rules e insira um Rewrite URL. Configure o Create Rule e a Rule Name e clique em OK.
Objeto de reescrita
Método de operação
Descrição
Exemplo
Path
Retain
Não modifica o caminho original.
-
Path
Substitui por um caminho fixo (deve começar com /).
/new/pathDynamic
Usa uma expressão para gerar o caminho dinamicamente.
concat("/v2", http.request.uri.path)Query String
Retain
Não modifica a query string original.
-
Static
Substitui por parâmetros fixos (sem ?).
version=new&type=apiRetain
Usa uma expressão para gerar a query string dinamicamente.
concat("version=new&", http.request.uri.query)
Exemplos de configuração
Exemplo 1: Migração de caminho de origem
Cenário: A origem move imagens do diretório
/images/para o diretório/static/img/.Se as requisições corresponderem a...
starts_with(http.request.uri.path, "/images/")-
Configuração de reescrita:
Objeto de reescrita: Path
Método de operação: Dynamic
Expressão:
regex_replace(http.request.uri.path, "^/images/", "/static/img/") -
Efeito da reescrita:
Requisição do usuário:
https://example.com/images/logo.pngRequisição à origem:
https://origin.com/static/img/logo.png
Exemplo 2: Adaptação de versão de API
Cenário: Reescrever requisições de
/api/v1/para/api/v2/durante requisições à origem e adicionar um identificador de versão.Se as requisições corresponderem a...
starts_with(http.request.uri.path, "/api/v1/")-
Configuração de reescrita:
Objeto de reescrita: Path, Query string
Método de operação: Dynamic
Expressão de reescrita de caminho:
regex_replace(http.request.uri.path, "^/api/v1/", "/api/v2/")Expressão de reescrita de query string:
concat("api_version=v2&", http.request.uri.query) -
Efeito da reescrita:
Requisição do usuário:
https://example.com/api/v1/users?limit=10Requisição à origem:
https://origin.com/api/v2/users?api_version=v2&limit=10
Exemplo 3: Padronização de parâmetros
Cenário: Diferentes clientes usam nomes de parâmetros distintos (como
userideuid). Unifique-os para o padrãouser_id.Se as requisições corresponderem a...
http.request.uri.query contains "userid="-
Configuração de reescrita:
Objeto de reescrita: Query string
Método de operação: Dynamic
Expressão:
regex_replace(http.request.uri.query, "userid=", "user_id=") -
Efeito da reescrita:
Requisição do usuário:
https://example.com/profile?userid=123Requisição à origem:
https://origin.com/profile?user_id=123
Exemplo 4: Normalização de caminho
Case 1
Cenário: Remover barras extras (como
//) das URLs causadas por erros de entrada.Observação: A função
regex_replacesubstitui apenas a primeira ocorrência na string de origem.Se as requisições corresponderem a...
http.request.uri.path contains "//"-
Configuração de reescrita:
Objeto de reescrita: Path
Método de operação: Dynamic
Expressão:
regex_replace(http.request.uri.path, "//+", "/") -
Efeito da reescrita:
Requisição do usuário:
https://example.com/path//to/resourceRequisição à origem:
https://origin.com/path/to/resource
Case 2
Cenário: Reduzir múltiplas barras consecutivas para barras únicas. Exemplo:
/path///download//image//user.jpg.Solução: Aninhar múltiplas chamadas de
regex_replacepara substituir progressivamente as barras consecutivas.Se as requisições corresponderem a...
http.request.uri.path contains "//"-
Configuração de reescrita:
Objeto de reescrita: Path
Método de operação: Dynamic
Expressão:
regex_replace(regex_replace(regex_replace(http.request.uri.path, "//+", "/"), "//+", "/"), "//+", "/")
-
Efeito da reescrita:
Requisição do usuário:
https://example.com/path///download//image//user.jpgRequisição à origem:
https://origin.com/path/download/image/user.jpg
Exemplo 5: Remover todos os parâmetros de consulta
Cenário: Remover todos os parâmetros de consulta de recursos estáticos. Por exemplo, eliminar query strings de URIs que terminam com
.css.Se as requisições corresponderem a...
ends_with(http.request.uri.path, ".css")-
Configuração de reescrita:
Objeto de reescrita: Query string
Método de operação: Dynamic
Expressão:
regex_replace(http.request.uri.query, ".*", "") -
Efeito da reescrita:
Requisição do usuário:
https://example.com/style.css?version=1.2.3Requisição à origem:
https://origin.com/style.css?
Exemplo 6: Simplificar caminhos dinâmicos
Cenário: Remover sequências numéricas redundantes dos caminhos. Por exemplo, eliminar
123seguido de dígitos em caminhos sob/example/.Se as requisições corresponderem a...
(http.request.uri matches "^/example/(.*)123[0-9]+(.*)$")-
Configuração de reescrita:
Objeto de reescrita: Path
Método de operação: Dynamic
Expressão:
regex_replace(http.request.uri,"^/example/(.*)123[0-9]+(.*)$","/example/$1$2") -
Efeito da reescrita:
Requisição do usuário:
https://example.com/example/tool12300341featuresRequisição à origem:
https://origin.com/example/toolfeatures
Exemplo 7: Extrair parâmetros de caminho e adicionar à query string
-
Cenário: Extrair um segmento dinâmico do caminho, adicioná-lo como parâmetro de consulta e substituí-lo por uma string fixa:
URI original:
/api/v1/dynamic_value/download?version=1&size=2URI reescrita:
/api/v1/fixed/download?version=1&size=2&token=dynamic_value Se as requisições corresponderem a... Todas as requisições recebidas
-
Configuração de reescrita:
Objeto de reescrita: Path + Query string
Método de operação: Dynamic
Expressão de reescrita de caminho:
regex_replace(http.request.uri.path, "^/api/v1/(.*)/download$", "/api/v1/fixed/download")Expressão de reescrita de query string:
concat(http.request.uri.query,"&token=",regex_replace(http.request.uri.path, "^/api/v1/(.*)/download$","$1")) -
Efeito da reescrita:
Requisição do usuário:
https://example.com/api/v1/ABC123/download?version=1&size=2Requisição à origem:
https://origin.com/api/v1/fixed/download?version=1&size=2&token=ABC123
Exemplo 8: Remover parâmetros específicos
Cenário: Remover parâmetros de consulta específicos. Por exemplo, dada a URL
https://example.com/1.txt?key1=value1&key2=value2&key3=value3&key4=value4&key5=value5&key6=value6, remova key2, key3, key5 e key6, mantendo apenas key1 e key4.Se as requisições corresponderem a... Todas as requisições recebidas
-
Configuração de reescrita:
Objeto de reescrita: Query string
Método de operação: Dynamic
Expressão:
regex_replace(regex_replace(regex_replace(regex_replace(http.request.uri.query, "(&?key2=[^&]*)", ""), "(&?key3=[^&]*)", ""), "(&?key5=[^&]*)", ""), "(&?key6=[^&]*)", "")NotaCada
regex_replaceaninhado remove um parâmetro. O padrão(&?keyN=[^&]*)corresponde ao&precedente para evitar caracteres&residuais. -
Efeito da reescrita:
Requisição do usuário:
https://example.com/1.txt?key1=value1&key2=value2&key3=value3&key4=value4&key5=value5&key6=value6Requisição à origem:
https://origin.com/1.txt?key1=value1&key4=value4
Exemplo 9: Manter parâmetros específicos
Cenário: Manter apenas parâmetros de consulta específicos. Por exemplo, dada a URL
https://example.com/1.txt?key1=value1&key2=value2&key3=value3&key4=value4, mantenha apenas key1 e key4.Se as requisições corresponderem a... Todas as requisições recebidas
-
Configuração de reescrita:
Objeto de reescrita: Query string
Método de operação: Dynamic
Expressão:
concat("key1=", http.request.uri.args["key1"], "&key4=", http.request.uri.args["key4"])NotaA função
concatreconstrói a query string com apenas os parâmetros especificados. Usehttp.request.uri.args["keyN"]para extrair o valor de cada parâmetro. Parâmetros não listados são excluídos. -
Efeito da reescrita:
Requisição do usuário:
https://example.com/1.txt?key1=value1&key2=value2&key3=value3&key4=value4Requisição à origem:
https://origin.com/1.txt?key1=value1&key4=value4
Exemplo 10: Excluir requisições por extensão de nome de arquivo e reescrever
Cenário: Excluir requisições cuja extensão de nome de arquivo seja
htmle reescrever todas as outras requisições para um caminho especificado.Se as requisições corresponderem a... Extensão de nome de arquivo diferente de
html. Expressão:http.request.uri.path.extension ne html-
Configuração de reescrita:
Objeto de reescrita: Path
Método de operação: Static
Caminho reescrito:
/static/index.html
A variável http.request.uri.path.extension retorna a extensão do segmento de arquivo mais à direita no caminho da URI, sem o ponto inicial. Por exemplo, a extensão de /cat.jpg é jpg, a extensão de /cat é uma string vazia e a extensão de /cat.html é html.
Exemplo 11: Roteamento de requisições com base na extensão do nome de arquivo
Cenário: Roteie requisições que possuem extensão de nome de arquivo para
static/urle requisições sem extensão parastatic/index.html.-
Se as requisições corresponderem a... e configuração de reescrita:
-
Para requisições com extensão de nome de arquivo, use a condição de correspondência
http.request.uri.path.extension ne "".Objeto de reescrita: Path
Método de operação: Static
Caminho reescrito:
/static/url -
Para requisições sem extensão de nome de arquivo, use a condição de correspondência
http.request.uri.path.extension eq "".Objeto de reescrita: Path
Método de operação: Static
Caminho reescrito:
static/index.html
-