O Alibaba Cloud CDN suporta a reescrita de URL. Essa reescrita afeta apenas a URL usada nas requisições de origin fetch e não altera o roteamento interno da CDN nem a chave de cache.
Como funciona
As regras de Origin Path Rewrite permitem modificar o caminho da requisição para corresponder à localização real do recurso no servidor de origem. Isso garante que os POPs recuperem os recursos com precisão ou transmitam query strings específicas para a origem.
-
Se a Flag estiver defina como None ou break, o sistema reescreve apenas o caminho do recurso na URL.

-
Se a Flag estiver defina como enhance break, é possível reescrever tanto o caminho do recurso quanto a query string.

Notas de uso
É possível configurar até 50 regras de Origin Path Rewrite para um único nome de domínio.
O sistema aplica as regras de cima para baixo. A ordem delas afeta o resultado final da reescrita.
Ao configurar regras de Origin Path Rewrite, elas podem entrar em conflito com o recurso Ignore parameters na aba Domain Names > Optimization. Evite conflitos de configuração.
Ao configurar o Origin Path Rewrite e regras de origem condicional, a regra de Origin Path Rewrite pode alterar o caminho da URL de origin fetch. Isso pode fazer com que o caminho da requisição que o servidor de origem recebe difira do caminho esperado, resultando em um erro 404. Para solucionar o problema, desative temporariamente a regra de Origin Path Rewrite e verifique se a requisição funciona conforme o esperado. Caso precise usar ambos os recursos, ajuste as prioridades e as condições das regras para evitar reescritas de caminho não intencionais.
Use variáveis para um controle de configuração mais detalhado. Para mais informações, consulte Variable reference.
Diferenças entre Access URL Rewrite e Origin Path Rewrite
Recurso | Objeto afetado | Experiência do cliente | Cenário de aplicação |
Reescrita de URLs de acesso | Afeta a URL que o cliente acessa. Também altera a URL que o nó DCDN usa para origin fetches. |
| Uso comum: migrar ou mapear URLs de um nome de domínio antigo para um novo. Também serve para fornecer URLs diferentes para clientes móveis e PCs. Exemplo: Quando um cliente acessa |
Afeta a URL que o nó DCDN usa para origin fetches. A URL que o cliente acessa permanece inalterada. | A URL que o cliente vê é a mesma que a URL de acesso real. Não há alteração. | Uso comum: ocultar a estrutura real de URL do servidor de origem para proteger suas informações. Também serve para mapeamento de URL, fazendo com que o nó DCDN busque conteúdo em diferentes pastas do servidor de origem. Exemplo: Quando um cliente acessa |
Diagrama do Access URL Rewrite
O cliente envia uma requisição para um nó DCDN. A URL da requisição é
old.example.com/hello.Após o nó DCDN receber a requisição, ele aplica a regra de reescrita de URL. O nó DCDN inclui a nova URL,
new.example.com/hello, no cabeçalho Location da resposta 302 que envia ao cliente.Depois que o cliente recebe a resposta 302, ele envia uma requisição para a nova URL.
O nó DCDN verifica seu cache. Se o cache contiver o conteúdo da URL reescrita, o nó retorna o conteúdo diretamente ao cliente. Caso contrário, o nó DCDN envia uma requisição ao servidor de origem usando a URL reescrita,
new.example.com/hello.O servidor de origem recebe a requisição e retorna o conteúdo da resposta ao nó DCDN.
O nó DCDN armazena o conteúdo da resposta em cache e o retorna ao cliente.
Diagrama do Origin Path Rewrite
O cliente envia uma requisição para um nó DCDN. A URL da requisição é
cdn.example.com/files/hello.txt.Após o nó DCDN receber a requisição, ele verifica seu cache. Se o cache contiver o conteúdo da URL da requisição, o nó retorna o conteúdo diretamente ao cliente. Caso contrário, o nó DCDN aplica a regra de reescrita da URL de origin fetch. Ele reescreve a URL de origin fetch para
origin.example.com/secret/files/hello.txte envia uma requisição ao servidor de origem.Depois que o servidor de origem recebe a requisição, ele retorna o conteúdo da resposta ao nó DCDN.
O nó DCDN armazena o conteúdo da resposta em cache e o retorna ao cliente.
configure o Origin Path Rewrite
Acesse o CDN console.
No painel de navegação à esquerda, clique em Domain Names.
Na página Domain Names, encontre o nome de domínio de destino e clique em Manage na coluna Actions.
No painel de navegação à esquerda do nome de domínio, clique em Origin Fetch.
clique em Origin Path Rewrite.
-
clique em Add. configure Path to Be Rewritten, Target Path e Flag.
Parâmetro
Exemplo
Descrição
Path to Be Rewritten
^/hello$
Um caminho de URL que começa com uma barra (/) e não inclui
http://ou um nome de domínio. Use um padrão PCRE (Perl Compatible Regular Expressions).Target Path
/hello/test
Um caminho de URL que começa com uma barra (/) e não inclui
http://ou um nome de domínio. Suporta PCRE.Flag
None
Se houver várias regras configuradas, após a correspondência e execução desta regra, o sistema também executa as regras subsequentes em sequência.
break
Se você configurar várias regras e a URL da requisição corresponder a esta regra, o sistema não avalia nenhuma regra subsequente.
O sistema modifica apenas o caminho do recurso da URL, e não os parâmetros da URL. Portanto, isso não afeta a reescrita dos parâmetros da URL pelo recurso Origin Path Rewrite.
enhance break
Se você configurar várias regras e a URL da requisição corresponder a esta regra, o sistema não avalia nenhuma regra subsequente.
Semelhante a
break, mas esta flag também reescreve a query string. Isso pode entrar em conflito com o recurso rewrite origin fetch parameters. Se usar ambos os recursos, garanta que as configurações não entrem em conflito.
-
Clique em OK para aplicar a regra.
Também é possível clicar em Modify ou Delete na lista de regras na aba Origin Path Rewrite para gerenciar as regras existentes.
Exemplos de configuração
-
Exemplo 1: defina a Flag como None
Path to Be Rewritten
^/hello$
Target Path
/index.html
Flag
None
Resultado
Requisição original:
http://example.com/helloRequisição de origin fetch após a reescrita:
http://example.com/index.htmlO sistema então compara a requisição com as regras subsequentes na lista de Origin Path Rewrite.
-
Exemplo 2: defina a Flag como break
Path to Be Rewritten
^/hello.jpg$
Target Path
/image/hello.jpg
Flag
break
Resultado
Requisição original:
http://example.com/hello.jpgRequisição de origin fetch após a reescrita:
http://example.com/image/hello.jpgO sistema não avalia nenhuma regra subsequente na lista de Origin Path Rewrite.
-
Exemplo 3: defina a Flag como enhance break
Path to Be Rewritten
^/hello.jpg?code=123$
Target Path
/image/hello.jpg?code=321
Flag
enhance break
Resultado
Requisição original:
http://example.com/hello.jpg?code=123Requisição de origin fetch após a reescrita:
http://example.com/image/hello.jpg?code=321O sistema não avalia nenhuma regra subsequente na lista de Origin Path Rewrite.
-
Exemplo 4: Prefixar caminhos variáveis no diretório raiz
Por exemplo, é possível reescrever um caminho de URL como /xxx, em que xxx é um nome de arquivo variável (como /hello.jpg ou /hello.html), para /image/xxx. Isso insere o prefixo /image no caminho de qualquer arquivo no diretório raiz.
Path to Be Rewritten
^(.*)$
Nota^corresponde ao início da string.(.)é um grupo de captura, em que.corresponde a qualquer caractere único, exceto um caractere de nova linha, ecorresponde ao caractere ou grupo anterior zero ou mais vezes. Use $1 no Target Path para referenciar o conteúdo capturado por este grupo.$corresponde ao fim da string. Portanto,^(.)$corresponde à string inteira do início ao fim e captura todos os caracteres, exceto os de nova linha, em um grupo. Por exemplo, para a string"hello world",^(.)$corresponde à string inteira e captura"hello world"no primeiro grupo.Target Path
/image$1
Nota/imagecorresponde à string"/image".$1referencia o conteúdo do primeiro grupo de captura,$2referencia o conteúdo do segundo grupo de captura, e assim por diante. Portanto,/image$1significa que a string"/image"é imediatamente seguida pelo conteúdo do primeiro grupo de captura. Por exemplo, se o conteúdo do primeiro grupo de captura for"abc",/image$1corresponde à string"/imageabc". Observe que$1referencia o conteúdo do grupo de captura, e não a string literal"$1". Para corresponder à string literal"$1", use um caractere de escape, como"\$1".Flag
break
Resultado
Requisição original:
http://example.com/hello.jpgRequisição de origin fetch após a reescrita:
http://example.com/image/hello.jpgRequisição original:
http://example.com/hello.htmlRequisição de origin fetch após a reescrita:
http://example.com/image/hello.html
O sistema não avalia nenhuma regra subsequente na lista de Origin Path Rewrite.
-
Exemplo 5: Prefixar caminhos sob um diretório específico
Por exemplo, é possível reescrever uma URL que contenha /live/xxx, em que xxx representa qualquer nome de arquivo (como hello.jpg ou hello.html), para /image/live/xxx. Isso insere o prefixo /image no caminho de qualquer arquivo sob o diretório /live.
Path to Be Rewritten
^/live/(.*)$
Target Path
/image/live/$1
Flag
break
Resultado
Requisição original:
http://example.com/live/hello.jpgRequisição de origin fetch após a reescrita:
http://example.com/image/live/hello.jpgRequisição original:
http://example.com/live/hello.htmlRequisição de origin fetch após a reescrita:
http://example.com/image/live/hello.html
O sistema não avalia nenhuma regra subsequente na lista de Origin Path Rewrite.
-
Exemplo 6: Encadear regras com a flag None
Considere duas regras de reescrita ativadas. A Regra 1 reescreve
^/image_01.png$para/image_02.pngcom a Flag defina como None. A Regra 2 reescreve^(.*)$para/image$1com a Flag defina como None.Resultado:
Requisição original:
http://example.com/image_01.png-
Requisição de origin fetch após a reescrita:
http://example.com/image/image_02.pngNotaA requisição primeiro corresponde à Regra 1, e o sistema a reescreve para
http://example.com/image_02.png. Como a Flag está defina como None, o sistema então avalia o caminho reescrito em relação à Regra 2, que também corresponde. O sistema reescreve o caminho uma segunda vez, resultando no caminho final:http://example.com/image/image_02.png.
-
Exemplo 7: Interromper a avaliação de regras com break
Considere duas regras de reescrita ativadas. A Regra 1 reescreve
^/image_01.png$para/image_02.pngcom a Flag defina como break. A Regra 2 reescreve^(.*)$para/image$1com a Flag defina como None. Quando uma requisição corresponde à Regra 1, o processamento para e o sistema não avalia as regras subsequentes porque a Flag está defina como break.Resultado:
Requisição original:
http://example.com/image_01.png-
Requisição de origin fetch após a reescrita:
http://example.com/image_02.pngNotaA requisição primeiro corresponde à Regra 1, e o sistema a reescreve para
http://example.com/image_02.png. Como a Flag da Regra 1 está defina como break, o processamento para e o sistema não avalia nenhuma regra subsequente.