上一篇是如何开启相关的模块的,这篇说说ext_filter 过滤器。码字很费劲,直接搬了一篇老外的《在 Apache 2.4 上建立一个 mod_ext_filter 过滤器》并做了简单的翻译。
该文中把过滤器放在 httpd.conf 中,其实放到指定的 httpd-filter.conf 文件中更适合;<Location> 部分应该放在虚拟机配置文件中,这样方便修改。
此外,如果过滤器不起作用,则可能是传输的数据是压缩的或者是内容被加密了。小概率的是 apache 的bug 。。。
https://www.apachelounge.com/viewtopic.php?p=39571
译文如下
原文 http://masscto.blogspot.com/2016/10/building-modextfilter-on-apache-24.html
在 Apache 2.4 上建立一个 mod_ext_filter 过滤器
2016年10月12日星期三
mod_ext_filter 手册 https://httpd.apache.org/docs/2.4/mod/mod_ext_filter.html
使用 mod_ext_filter,我们可以编写处理传入HTTP请求和传出HTTP响应的外部程序。当这样使用程序时,它们称为 过滤器。下图描述了这个想法:
在 httpd.conf 加入以下代码激活过滤器,此代码位于httpd.conf文件的顶层,即不嵌套在任何其他内容中。
<IfModule mod_ext_filter.c>
ExtFilterDefine myfilter mode=output
intype=text/xml outtype=text/xml
cmd="/usr/local/bin/php
/home/rapicour/public_html/filtertest.php"
</IfModule>
ExtFilterDefine 指令为过滤器命名,在此示例中为 myfilter
mode 属性告诉Apache模块是处理请求(输入过滤器)还是处理响应(输出过滤器)。在此示例中正在实现一个输出过滤器,从而在HTTP响应传递到客户端之前捕获并处理它们。
intype 属性指定过滤器处理哪种MIME类型文件。在此示例中为 text/xml 的文件。请注意,intype属性(预先定义)将过滤器限制为仅对基于XML的响应起作用。
outtype 属性指定过滤器产生的类型(MIME)。如果没有指定,outtype被认为是intype一样的类型(MIME)
cmd 属性指定执行外部程序。我们的示例使用名为filtertest.php的PHP程序实现了过滤器。需要使用绝对路径。
<IfModule>部分大概就这些属性,用</IfModule>完成这些设置。然后在<Location>标签中添加以下行告诉Apache使用指定的过滤器来处理响应。
<Location "/vhosts">
SetOutputFilter myfilter
# Header set Content-Encoding gzip
</Location>
<Location> 指令告诉Apache将给定的 myfilter 过滤器应用于那个目录的所有文件。在这种情况下,我们指定“ /”或Web服务器的根目录。
更新httpd.conf文件后,请确保重新启动服务器。