Httpd Location 指令似乎抑制了替代

Httpd Location 指令似乎抑制了替代

我试图隐藏脉宽调制注册页面(其 URL 为/pwm/public/newuser)放置在现有服务器 的后面http://customers.example.com,保留路径 下/register,这样http://customers.example.com/http://customers.example.com/shop等页面将继续照常工作,同时http://customers.example.com/register代理到 PWM 内联网安装。

PWM 部署于"http://reg-server:8680/pwm

由于该应用程序依赖于 HTML 内容(即链接和表单操作属性)和 javascript 内容引用/pwm/...我必须操作旁边的两种类型的内容内容得到邮政 请求和地点回应。

这就是我随后配置的方式Apache HttpdVirtualHost(更多信息标头指令稍后发布):

<VirtualHost *:80>

    ServerName customers.example.com
    Header set Server "Apache"

    <Location "/public/api">

        Header append Server Funky

        <If "%{QUERY_STRING} =~ /processAction=clientData/">

            Header append Server Mojo

            AddOutputFilterByType SUBSTITUTE application/json

            Substitute s|url-context|url-ZZZ|
            Header append Server Tango

        </If>
    </Location>


    # ... ProxyPass directives

    <Location "/register">

    Header append Server "Apache-3"

    # HTML content proxy configuration #

    ProxyHTMLEnable On

    # Added proxying of 'meta' tag attributes
    ProxyHTMLLinks  meta       data-url-context content
    ProxyHTMLLinks  a          href
    ...
    ProxyHTMLLinks  script     src for

    ProxyHTMLDocType "<!DOCTYPE html>"

    ProxyHTMLCharsetOut *
    ProxyHTMLBufSize 16384
    ProxyHTMLExtended On
    SetOutputFilter INFLATE;proxy-html;DEFLATE

    # Replaced, but it seems it's not being used, page refresh is handled by js
    ProxyHTMLURLMap "(.*?)=/pwm/public/newuser(.*)" "$1=/register$2" RL

    ProxyHTMLURLMap "^/pwm$" "" RLn
    ProxyHTMLURLMap "/pwm/public/newuser" "/register" L
    ProxyHTMLURLMap "/public/newuser" "/register" L
    ProxyHTMLURLMap "/pwm" "" L
    ProxyHTMLURLMap "PWM_MAIN.submitPostAction('newuser', 'reset')" "PWM_MAIN.submitPostAction('registrazione', 'reset')" L

    </Location>

</VirtualHost>

问题是该指令

Substitute s|url-context|url-ZZZ|

没有得到尊重,因为调用

/public/api?processAction=clientData&etag=27...

生成以下 JSON 内容:

{ ... "url-command":"/pwm/public/command","url-context":"/pwm","url-logout":"/pwm/public/logout", ... }

尽管周围的Header append ...是,因为在服务器响应标头中我可以看到:

Server: Apache, Funky, Mojo, Tango

当我将mod_proxy_html<Location "/register"></Location>线内的指令。

事实上,如果我将它们注释掉,我可以看到:

{ ... "url-command":"/pwm/public/command","url-ZZZ":"/pwm","url-logout":"/pwm/public/logout", ... }

我是 Httpd 的新手,我不知道我的配置有什么问题,我甚至尝试用正则表达式指定路径:

 <Location ~ "^/public/api">
 <Location ~ "^/register">

但什么都没改变。

2.4.33 中发生了这种情况

答案1

问题是 Httpd(我无法判断这是默认设置还是现有配置)压缩响应主体,因此尝试将任何正则表达式应用于压缩 HTML 都无法匹配任何内容(也没有给出任何错误或提示)。

在以前的配置中,可以通过该指令实现 HTML 内容替换:

SetOutputFilter INFLATE;proxy-html;DEFLATE

当然,在我把所有的mod_proxy_html<Location />该路径上的内部指令SetOoutputfilter不再有效/public/api

因此我重新措辞了<If>内容如下:

<If "%{QUERY_STRING} =~ /processAction=clientData/">

    SetOutputFilter INFLATE;DEFLATE
    AddOutputFilterByType SUBSTITUTE application/json
    Substitute s|"(url-[^:]+)"\s*:\s*"/pwm(/?)([^,\}]*)"|"$1":"/$3"|q

</If>

一切再次正常运转 — — 此位置没有活动的 HTML 编辑指令,因此我省略了proxy-html过滤器。

接受的答案Apache Proxying 导致 ERR_CONTENT_DECODING_FAILED 错误对此有所帮助。

相关内容