Apache2 mod_substitute 无法正常工作

Apache2 mod_substitute 无法正常工作

我有一个有效的反向代理,它只在我的站点中的特定位置有效,在本例中例如:www.example.com/reverseproxy/site1我正在反向代理 site1。我想替换每个代理页面的主体部分,所以我尝试使用 mod_substitute,问题是我无法让它在<Location /reverseproxy>

这是我的 httpd(SSL 已启用):

<VirtualHost _default_:443> 

    ProxyPassInterpolateEnv On
    RewriteEngine On

    ... Some rewrite rules
    RewriteRule /?reverseproxy/http(s*):/([^\/]*)/*(.*) "http$1://$2/$3" [P]
    SSLProxyEngine On
    ProxyPassReverse "/reverseproxy/http${ssl}://${page}" http${ssl}://${page} interpolate

    SetOutputFilter INFLATE;proxy-html;SUBSTITUTE;DEFLATE;
    ProxyHTMLInterp On
    ProxyHTMLExtended Off

    ...Some ProxyURLMap
    AddOutputFilterByType SUBSTITUTE text/html
    Substitute "s|<body>|<body1>|"
</VirtualHost>

这个替代确实有效,但它适用于所有页面,而不仅限于/reverseproxy。当我尝试将其放入时,它<Location /reverseproxy>不起作用,它只是忽略它:

<Location /reverseproxy>
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|<body>|<body1>|"
</Location>

我尝试过的:

我尝试添加

 RequestHeader unset Accept-Encoding

但它<Location>不起作用

我尝试添加这个

SetOutputFilter SUBSTITUTE;DEFLATE

<Location /reverseproxy>标签中,但没有运气

正如有人建议的那样,尝试使用此过滤链

FilterDeclare filter
FilterProvider filter SUBSTITUTE "%{CONTENT_TYPE} =~ m|^text/html|"
FilterDeclare unpackGZIP
FilterProvider unpackGZIP INFLATE "resp('Content-Encoding') == 'gzip'"

<Location /reverseproxy>
FilterChain unpackGZIP filter DEFLATE

位置内的其他一切都有效,它只是似乎忽略了替换。

答案1

我很高兴地说,有一种方法可以解决插值问题,至少可以解决替换问题。

这里有很多关于使用 mod_substitute 进行插值的 Google 搜索结果,所以我想我可以帮上忙。确实可以做这样的事情:

## These modules are required
LoadModule filter_module modules/mod_filter.so
LoadModule substitute_module modules/mod_substitute.so
LoadModule env_module modules/mod_env.so

## Must be done in vhost directive
<VirtualHost:*:80>
PassEnv HOSTNAME_ENV_VARIABLE_NAME
Define SUBSTITUTE_STRING "s|http://hardcoded-url|http://${HOSTNAME_ENV_VARIABLE_NAME}|i"

<Location /my-path-here-wut-wut/>
        AddOutputFilterByType SUBSTITUTE my/mime-type-here
        Substitute "${SUBSTITUTE_STRING}"
</Location>


</VirtualHost>

当访问时,/my-path-here-wut-wut/返回包含http://hardcoded-url它的 HTML 将被替换为http://<HOSTNAME_ENV_VARIABLE_NAME>

答案2

对我来说唯一可行的解​​决方案是:

AddOutputFilterByType INFLATE;SUBSTITUTE;DEFLATE text/html

来源:

相关内容