跳转到内容
搜索文档

更改 URI 路径和 Host 标头

最后更新 查看 MarkdownAgent 设置

本教程将指导你如何使用 Transform Rules 和 Origin Rules 同时修改传入请求的 URI 路径和 Host 标头。

你的网站访问者将从 https://<YOUR_SOURCE_HOSTNAME>/uploads/* 路由到 https://<YOUR_TARGET_HOSTNAME>/*

在本教程中,你将完成以下操作:

  1. 创建 URL 重写以从路径中移除 /uploads
  2. 创建源站规则(origin rule)以将 Host 标头修改为所需的主机名。

按照这些步骤操作,你可以有效管理 URI 路径和 Host 标头,以适当路由流量并优化请求处理。

1. 创建 URL 重写

  1. 在 Cloudflare 仪表板中,前往 Rules 概览 页面。

    Go to Overview ↗
  2. 选择 Create rule(创建规则) > URL Rewrite Rule(URL 重写规则)

  3. Rule name(规则名称) 中输入规则的描述性名称。

  4. If incoming requests match(如果传入请求匹配) 下,选择 Custom filter expression(自定义过滤表达式),选择 Edit expression(编辑表达式),并输入以下表达式:

    Expression Editor(表达式编辑器) 中的文本:

    raw.http.request.uri.path matches "^/uploads/.*"
  5. Set Rewrite parameters(设置重写参数) 下,选择 Path(路径) > Rewrite to(重写为),并选择 Dynamic(动态)

  6. 定义重写 URL 规则的操作:

    Path(路径) > Rewrite to(重写为) > Dynamic(动态) 之后的文本:

    regex_replace(raw.http.request.uri.path, "^/uploads/", "/")

    regex_replace() 函数将路径中的 /uploads/ 部分替换为 /,从而将 /uploads/example.jpg 更改为 /example.jpg

  7. 选择 Deploy(部署)

2. 创建源站规则

  1. 在 Cloudflare 仪表板中,前往 Rules 概览 页面。

    Go to Overview ↗
  2. 选择 Create rule(创建规则) > Origin Rule(源站规则)

  3. Rule name(规则名称) 中输入规则的描述性名称。

  4. When incoming requests match(当传入请求匹配时) 下,定义规则表达式:

    Expression Editor(表达式编辑器) 中的文本:

    raw.http.request.uri.path matches "^/uploads/.*"
  5. Set origin parameters(设置源站参数) 下,选择 Host Header(主机标头) > Rewrite to(重写为)

  6. 配置规则以将 Host 标头修改为所需的主机名:

    Host Header(主机标头) > Rewrite to(重写为) 之后的文本:

    example.com

    这会将匹配请求的 Host 标头 设置为 example.com。请务必将 example.com 替换为你的实际主机名。

  7. (可选)要将请求路由到不同的源站(DNS 目标),请使用 DNS override

    DNS Record(DNS 记录) > Override to(覆盖为) 之后的文本:

    example.com

    这会将请求路由到 example.com 的 DNS 目标,而不是你的默认 DNS 记录

  8. 选择 Deploy(部署)

最后说明

完成本教程后,发往 https://<YOUR_SOURCE_HOSTNAME>/uploads/* 的入站流量将路由到 https://<YOUR_TARGET_HOSTNAME>/*

确保 URL 重写源站规则(或 Cloud Connector 规则)的过滤器足够精确,以避免意外的规则执行。

请记住,规则是按顺序评估的,因此 Transform Rules(包括 URL 重写)会在 Origin Rules 或 Cloud Connector 之前运行。

这篇文档对您有帮助吗?