Apache AddOutputFilterByType is deprecated. How to rewrite using mod_filter?

后端 未结 3 1587
一向
一向 2020-12-13 15:11

AddOutputFilterByType is deprecated in Apache.

The documentation says that the same functionality is available using mod_filter.

I currently use



        
相关标签:
3条回答
  • 2020-12-13 15:51

    AddOutputFilterByType had severe limitations in httpd-2.2 so it was marked deprecated there. But in httpd-2.4 this directive was moved to filter_module, corrected and un-deprecated.

    In apache 2.2 you should instead enable filter_module and deflate_module and use:

    # Declare a "gzip" filter, it should run after all internal filters like PHP or SSI
    FilterDeclare  gzip CONTENT_SET
    
    # "gzip" filter can change "Content-Length", can not be used with range requests
    FilterProtocol gzip change=yes;byteranges=no
    
    # Enable "gzip" filter if "Content-Type" contains "text/html", "text/css" etc.
    FilterProvider gzip DEFLATE resp=Content-Type $text/html
    FilterProvider gzip DEFLATE resp=Content-Type $text/css
    FilterProvider gzip DEFLATE resp=Content-Type $text/javascript
    FilterProvider gzip DEFLATE resp=Content-Type $application/javascript
    FilterProvider gzip DEFLATE resp=Content-Type $application/x-javascript
    
    # Add "gzip" filter to the chain of filters
    FilterChain    gzip
    

    deflate_module would only serve compressed content to browsers that declare support for gzip encoding in request header.

    0 讨论(0)
  • 2020-12-13 15:57

    I'm using mod_filter for substituing instead of deflating, but the idea is the same. This is what worked for me (I'm doing reverse proxy and rewriting urls and links):

    LoadModule substitute_module modules/mod_substitute.so
    LoadModule filter_module modules/mod_filter.so
    
    FilterDeclare MYFILTER
    # syntax changed in Apache2.4  (see also  https://httpd.apache.org/docs/current/mod/mod_filter.html)  
    FilterProvider MYFILTER SUBSTITUTE "%{Content_Type} = 'text/html'"
    FilterProvider MYFILTER SUBSTITUTE "%{Content_Type} = 'text/xml'"
    FilterProvider MYFILTER SUBSTITUTE "%{Content_Type} = 'application/javascript'"
    FilterProvider MYFILTER SUBSTITUTE "%{Content_Type} = 'application/json'"
    
    <Location /sial/> 
      ProxyPass        http://localhost:8300/
      ProxyPassReverse http://localhost:8300/
      ProxyPassReverseCookiePath / /sial/  
      FilterChain MYFILTER
      Substitute "s|/tea_sial_v2|/sial/tea_sial_v2|inq"
    </Location>
    
    0 讨论(0)
  • 2020-12-13 16:10

    It become un-deprecated in Apache 2.3.7, because it was moved/integrated into mod_filter. So, what I've got in:

    Instead of:

    <IfModule mod_deflate.c> 
       AddOutputFilterByType DEFLATE text/css
    

    using:

    <IfModule mod_filter.c>
    ...
    
    0 讨论(0)
提交回复
热议问题