首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Httpd位置指令似乎禁止替代

Httpd位置指令似乎禁止替代
EN

Server Fault用户
提问于 2018-06-07 14:50:52
回答 1查看 988关注 0票数 0

我试图将脉宽调制注册页面(其URL为/pwm/public/newuser)隐藏在现有服务器http://customers.example.com后面的保留路径/register下,以便http://customers.example.com/http://customers.example.com/shop等页面继续正常工作,而http://customers.example.com/register则被代理到PWM intranet安装。

脉宽调制部署在"http://reg-server:8680/pwm上。

由于该应用程序同时依赖于HTML (即链接和表单操作属性)和引用/pwm/...的javascript内容,所以除了GET和POST请求以及位置响应之外,我还必须操作这两种类型的内容。

下面是我如何配置Apache Httpd VirtualHost (稍后将详细介绍头指令):

代码语言:javascript
复制
    ServerName customers.example.com
    Header set Server "Apache"

    

        Header append Server Funky

        

            Header append Server Mojo

            AddOutputFilterByType SUBSTITUTE application/json

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

        
    


    # ... ProxyPass directives

    

    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 ""

    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

问题是那个指令

代码语言:javascript
复制
Substitute s|url-context|url-ZZZ|

不是被尊重,因为呼吁

代码语言:javascript
复制
/public/api?processAction=clientData&etag=27...

生成以下JSON内容:

代码语言:javascript
复制
{ ... "url-command":"/pwm/public/command","url-context":"/pwm","url-logout":"/pwm/public/logout", ... }

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

代码语言:javascript
复制
Server: Apache, Funky, Mojo, Tango

当我将国防部_代理_html指令放在和行中时,问题就出现了。

事实上,如果我把它们注释掉,我就能看到:

代码语言:javascript
复制
{ ... "url-command":"/pwm/public/command","url-ZZZ":"/pwm","url-logout":"/pwm/public/logout", ... }

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

代码语言:javascript
复制

但什么都没变。

这种情况发生在2.4.33

EN

回答 1

Server Fault用户

回答已采纳

发布于 2018-06-08 07:47:15

问题是Httpd (我无法判断它是默认的还是从现有的配置)压缩响应体,所以试图将任何正则表达式应用于压缩HTML并不匹配任何东西(也没有给出任何错误或提示)。

在前一种配置中,HTML内容替换是通过以下指令实现的:

代码语言:javascript
复制
SetOutputFilter INFLATE;proxy-html;DEFLATE

当然,在我将所有mod_proxy_html指令移到中之后,SetOoutputfilter/public/api路径上就不再是活动的了。

因此,我将内容改写如下:

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

这一切又开始了--在这个位置上没有活动的HTML编辑指令,所以我忽略了proxy-html过滤器。

接受答案 to Apache代理导致错误_内容_解码_失败错误在这方面提供了帮助。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/915643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档