date: 2018-09-19 00:34:43 +0800 title: “http.filter”

sitename: “Caddy中文文档”

http.filter

http.filter用来过滤响应体。

这对于修改静态HTML文件以向其添加(例如)谷歌统计代码非常有用。

完整文档

示例

  1. filter rule {
  2. path <regexp pattern>
  3. content_type <regexp pattern>
  4. path_content_type_combination <and|or>
  5. search_pattern <regexp pattern>
  6. replacement <replacement pattern>
  7. }
  8. filter rule ...
  9. filter max_buffer_size <maximum buffer size in bytes>
  • rule:为要响应的文件定义一个新的筛选规则。

    重要提示:不要同时定义path和/或content_type。松弛规则会极大地影响系统性能,因为每个响应在返回之前都会被记录到内存中。

    • path:匹配请求路径的正则表达式。
    • content_type 与请求的内容类型匹配的正则表达式,该内容类型在整个请求的评估之后产生。
    • path_content_type_combination (从0.8版本开始) 可以是and或者or。(默认值为and,在这个参数存在之前是or
    • search_pattern 在响应体中查找正则表达式来替换它。
    • replacement 替换search_pattern的模式。 你可以使用参数,每个参数的格式必须是这样的:{name}。

      • 正则表达式组:search_pattern的每一组都可以使用{index}进行对应。

        • 例如:

          1. &#34;My name is (.*?) (.*?).&#34; =&gt; &#34;Name: {2}, {1}.&#34;
      • 请求上下文:像URL…类似的参数都可以使用。 例如:

        主机: {request_host}

  1. * `request_header<header name>` 请求的头信息(如果提供或为空)。
  2. * `request_url` 完整的请求网址
  3. * `request_path` 请求路径
  4. * `request_method` 请求方法
  5. * `request_host` 目标主机
  6. * `request_proto` 使用协议
  7. * `request_remoteAddress` 调用客户端的远程地址
  8. * `response_header_<header name>` 响应的头信息(如果提供或为空)。
  9. * 文件替换符:如果替换的前缀是@字符,那么将尝试查找具有这个名称的文件并从那里加载替换。这将帮助你添加更大的有效负载的替换,也会直接丑陋地存在于Caddyfile
  10. * 示例:`@myfile.html`
  11. * __max_buffer_size__ 将缓冲区大小限制为指定的最大字节数。如果一个规则匹配,在发送到HTTP客户端之前,首先将整个主体记录到内存中。如果达到这个限制,将不会执行任何过滤,内容将直接转发给客户端,以防止内存过载。默认值:10485760 (=10MB)

在每个HTML页面中插入服务器名

  1. filter rule {
  2. content_type text/html.*
  3. search_pattern Server
  4. replacement "This site was provided by {response_header_Server}"
  5. }

向文件中的每个HTML页面添加谷歌统计代码

  1. filter rule {
  2. path .*\.html
  3. search_pattern </title>
  4. replacement @googleAnalyticsSnippet.html
  5. }

将每个文本文件中的Foo替换为Bar

  1. filter rule {
  2. path .*\.txt
  3. search_pattern Foo
  4. replacement Bar
  5. }