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 no 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 foi 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
Se a reescrita de URL estiver ativada, as solicitações de prefetch devem usar a URL reescrita.
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 é utilizada 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: O sistema envia a URL reescrita ao servidor de origem. A resposta é armazenada em cache tendo 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 impactar o processamento de cabeçalhos.
Configure 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, em seguida, 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
Utiliza 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
Utiliza 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 na origem
Cenário: A origem moveu imagens do diretório
/images/para o diretório/static/img/.Condição de correspondência:
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:
Solicitaçã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.Condição de correspondência:
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:
Solicitaçã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.Condição de correspondência:
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:
Solicitaçã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
Caso 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.Condição de correspondência:
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:
Solicitação do usuário:
https://example.com/path//to/resourceRequisição à origem:
https://origin.com/path/to/resource
Caso 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.Condição de correspondência:
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:
Solicitaçã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: Eliminar todos os parâmetros de consulta de recursos estáticos. Por exemplo, remover query strings de URIs terminadas em
.css.Condição de correspondência:
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:
Solicitaçã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/.Condição de correspondência:
(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:
Solicitaçã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, anexá-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 Condição de correspondência: 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:
Solicitaçã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.Condição de correspondência: 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:
Solicitaçã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.Condição de correspondência: 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:
Solicitaçã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