Citrix ADC

用于重写的默认语法策略的教程示例

使用重写功能,您可以修改 HTTP 标头的任何部分,对于响应,您可以修改 HTTP 正文。您可以使用此功能完成许多有用的任务,例如删除不必要的 HTTP 标头、屏蔽内部 URL、重定向网页以及重定向查询或关键字。

在以下示例中,您首先创建重写操作和重写策略。然后,您将全局绑定策略。

本文档包括以下详细信息:

  • 将外部 URL 重定向到内部 URL
  • 重定向查询
  • 将 HTTP 重写为 HTTPS
  • 删除不需要的标头
  • 减少 Web 服务器重定向
  • 屏蔽服务器标头
  • 将纯文本转换为 URL 编码字符串,反之亦然

有关命令和语法描述的更多信息,请参阅重写命令引用页面。

将外部 URL 重定向到内部 URL

此示例介绍如何创建重写操作和重写策略,将外部 URL 重定向到内部 URL。您可以创建一个操作,称为 act_外部_to_内部,用于执行重写。然后,您创建一个名为“外部”的策略。

使用命令行界面将外部 URL 重定向到内部 URL

  • 要创建重写操作,请在命令提示符处键入:

add rewrite action act_external_to_internal REPLACE "http.req.hostname.server" "host_name_of_internal_Web_server"

  • 要创建重写策略,请在 Citrix ADC 命令提示符处键入:

add rewrite policy pol_external_to_internal "http.req.hostname.server.eq("host_name_of_external_Web_server") act_external_to_internal"

  • 全局绑定策略。

使用配置实用程序将外部 URL 重定向到内部 URL

  1. 导航至 AppExpert > 重写 > 操作
  2. 在详细信息窗格中,单击 Add(添加)。
  3. 创建重写操 作”对话框中,输入名称 act__外部_to_内部。
  4. 要将 HTTP 服务器主机名替换为内部服务器名,请从“类型”列表框中选择替换
  5. 在标头名称字段中,键入 主机
  6. 在替换文本的字符串表达式字段中,键入 Web 服务器的内部主机名称。
  7. 单击 Create(创建),然后单击 Close(关闭)。
  8. 在导航窗格中,单击策略
  9. 在详细信息窗格中,单击 Add(添加)。
  10. 在“名称”字段中,键入 pol_external_to_internal。此策略将检测到 Web 服务器的连接。
  11. 操作下拉菜单中,选择内部操作行为。
  12. 在表达式编辑器中,构建以下表达式:
HTTP.REQ.HOSTNAME.SERVER.EQ("www.example.com")
  1. 在全球范围内绑定您的新策略。

重定向查询

此示例介绍如何创建重写操作和重写策略,将查询重定向到正确的 URL。该示例假定请求包含一个设置为 www.example.com 的主机头文件和一个带有 string /query.cgi?server=5。重定向会从主机标头中提取域名,从查询字符串中提取数字,并将用户的查询重定向到服务器 Web5.example.com,其中处理用户查询的其余部分。

注意:

尽管以下命令出现在多行上,但您应该在不带换行符的单行上输入它们。

使用命令行将查询重定向到相应的 URL

  • 要创建名为 act_rerect_query 的重写操作,该操作将 HTTP 服务器主机名替换为内部服务器名称,请键入:

add rewrite action act_redirect_query REPLACE q#http.req.header("Host").before_str(".example.com")' '"Web" + http.req.url.query.value("server")#

  • 要创建名为 pol_rerect_query 的重写策略,请在 Citrix ADC 命令提示符处键入以下命令。此策略检测到包含查询字符串的 Web 服务器的连接。不要将此策略应用于不包含查询字符串的连接:

add rewrite policy pol_redirect_query q#http.req.header("Host").eq("www.example.com") && http.req.url.contains("?")' act_redirect_query#

  • 在全球范围内绑定您的新策略。

由于此重写策略非常具体,并且应在任何其他重写策略之前运行,因此建议为其分配高优先级。如果您为其分配优先级为 1,则将首先对其进行评估。

将 HTTP 重写为 HTTPS

此示例介绍如何重写 Web 服务器响应,以查找以字符串“http”开头的所有 URL,并将该字符串替换为“https”。您可以使用此功能来避免在将服务器从 HTTP 移动到 HTTPS 之后更新网页。

使用命令行界面将 HTTP URL 重定向到 HTTPS

  • 要创建名为 act_replace_http_with_https 的重写操作,将字符串“http”的所有实例替换为字符串“https”,请输入以下命令:

add rewrite action act_replace_http_with_https replace_all 'http.res.body(100)' '"https"' -pattern http

  • 要创建名为 pol_replace_http_with_https 的重写策略以检测到 Web 服务器的连接,请输入以下命令:

add rewrite policy pol_replace_http_with_https TRUE act_replace_http_with_https NOREWRITE

  • 在全球范围内绑定您的新策略。

若要对此重写操作进行故障排除,请参阅案例研究:将 HTTP 链接转换为 HTTPS 的重写策略不起作用

删除不需要的标头

此示例说明如何使用重写策略删除不需要的标头。具体而言,该示例演示了如何删除以下标头:

  • 接受 Encoding 标头。从 HTTP 响应中删除“接受编码”标头可防止响应的压缩。
  • 内容 Location 标头。从 HTTP 响应中删除内容位置标头可防止您的服务器向黑客提供可能允许发生安全漏洞的信息。

要从 HTTP 响应中删除标头,您需要创建重写操作和重写策略,然后全局绑定策略。

使用命令行界面创建适当的重写操作

在命令提示符下,键入以下命令之一以删除“接受编码”标头并防止响应压缩,或删除“内容位置”标头:

  • add rewrite action "act_remove-ae" delete_http_header "Accept-Encoding"
  • add rewrite action "act_remove-cl" delete_http_header "Content-Location"

使用命令行界面创建适当的重写策略

在命令提示符下,键入以下命令之一以删除“接受编码”标头或“内容位置”标头:

  • add rewrite policy "pol_remove-ae" true "act_remove-ae"
  • add rewrite policy "pol_remove-cl" true "act_remove-cl"

使用命令行界面全局绑定策略

在命令提示符下,根据需要键入以下命令之一以全局绑定您创建的策略:

  • bind rewrite global pol_remove_ae 100
  • bind rewrite global pol_remove_cl 200

减少 Web 服务器重定向

此示例说明如何使用 Rewrite 策略修改与主页的连接以及与服务器默认索引页的正斜杠 (/) 结尾的其他 URL 之间的连接,从而防止重定向并减少服务器上的负载。

使用命令行修改目录级 HTTP 请求以包含默认主页

  • 要创建名为“操作默认主页”的重写操作,该操作将以正斜杠结尾的 URL 修改为包含默认主页 index.html,请键入:

add rewrite action "action-default-homepage" replace q\#http.req.url.path "/" "/index.html"\#

  • 要创建名为策略默认主页的重写策略,该策略检测到主页的连接并应用新操作,请键入:

add rewrite policy "policy-default-homepage" q\#http.req.url.path.EQ("/") "action-default-homepage"\#

  • 全局绑定您的新策略以使其生效。

屏蔽服务器标头

此示例说明如何使用重写策略来掩盖 Web 服务器 HTTP 响应中的服务器标头中的信息。该标头包含黑客可以用来破坏您的网站的信息。虽然屏蔽标头不会阻止熟练的黑客找到有关您的服务器的信息,但它会使黑客攻击您的 Web 服务器更加困难,并鼓励黑客选择保护较少的目标。

从命令行掩盖响应中的服务器标头

  1. 要创建名为 act_mask-server 的重写操作,该操作将服务器标头的内容替换为不提供信息的字符串,请键入:

add rewrite action "act_mask-server" replace "http.RES.HEADER(\\"Server\\")" "\\"Web Server 1.0\\""

  1. 要创建名为 pol_mask-server 的重写策略以检测所有连接,请键入:

add rewrite policy "pol_mask-server" true "act_mask-server"

  1. 全局绑定您的新策略以使其生效。

如何将纯文本转换为 URL 编码字符串,反之亦然

以下表达式将纯文本转换为 URL 编码字符串,反之亦然:

  1. URL_RESERVED_CHARS_SAFE (string to URL ENCODED).

示例:

("abc def&123").URL_RESERVED_CHARS_SAFE
Output will be
“abc%20def%26123” which is url encoded.
  1. SET_TEXT_MODE(URLENCODED)。DECODE_USING_TEXT_MODE。(URL 编码为字符串)

示例:

("abc%20def%26123").SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE
Output will be
“abc def&123”

用于重写的默认语法策略的教程示例