AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 684359
Accepted
ZZ9
ZZ9
Asked: 2015-04-22 06:09:49 +0800 CST2015-04-22 06:09:49 +0800 CST 2015-04-22 06:09:49 +0800 CST

是否可以替换通过代理传递的每个页面上的内容,类似于 mod_rewrite 用于 URL 的方式?

  • 772

是否可以替换通过代理传递的每个页面上的内容,类似于 mod_rewrite 用于 URL 的方式?关于替代品的文档不清楚。

我有一些我正在反向代理的页面,它们具有绝对路径。这破坏了网站。它们需要替换,而 mod_rewrite 之类的工具没有拾取它们,因为它们不是 URL 请求。

<VirtualHost *:80>
    ServerName  servername1
    ServerAlias servername2

    ErrorLog "/var/log/proxy/jpuat_prox_error_log"
    CustomLog "/var/log/proxy/jpuat_prox_access_log" common

    RewriteEngine on
    LogLevel alert rewrite:trace2
    RewriteCond %{HTTP_HOST} /uat.site.co.jp$ [NC]
    RewriteRule ^(.*)$ http://jp.uat.site2uk.co.uk/$1 [P]

    AddOutputFilterByType SUBSTITUTE text/html
    Substitute "s|uat.site.co.jp|jp.uat.site2uk.co.uk|i"


    ProxyRequests Off

    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>

    ProxyPass / http://uat.site.co.jp/
    ProxyPassReverse / http://uat.site.co.jp/
</VirtualHost>

以上都不适用于替换 HTML 字符串

<link href="//uat.site.co.jp/css/css.css

和

<link href="//uat.site2uk.co.uk/css/css.css

更改后的配置:

<VirtualHost *:80>
    ServerName  jp.uat.site2uk.co.uk
    ServerAlias uat.site.co.jp
    ErrorLog "/var/log/proxy/jpuat_prox_error_log"
    CustomLog "/var/log/proxy/jpuat_prox_access_log" common
    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPass / http://uat.site.co.jp/
    ProxyPassReverse / http://uat.site.co.jp/
    AddOutputFilterByType SUBSTITUTE text/html
    Substitute "s|uat.site.co.jp|jp.uat.site2uk.co.uk|ni"
</VirtualHost>
proxy
  • 3 3 个回答
  • 24181 Views

3 个回答

  • Voted
  1. Best Answer
    Jenny D
    2015-04-22T07:57:43+08:002015-04-22T07:57:43+08:00

    有一个名为 mod_substitute 的 apache 模块可以做到这一点。这是一个简短的示例:

    <Location "/">
        AddOutputFilterByType SUBSTITUTE text/html
        Substitute "s/uat.site.co.jp/jp.uat.site2uk.co.uk/ni"
    </Location>
    

    或者,当与 mod_proxy 结合使用时:

    ProxyPass / http://uat.site.co.jp/
    ProxyPassReverse / http://uat.site.co.jp/
    
    Substitute "s|http://uat.site.co.jp/|http://jp.uat.site2uk.co.uk/|i"
    

    mod_substitute 的 Apache 文档中有更多信息。

    • 16
  2. g491
    2015-04-22T07:46:48+08:002015-04-22T07:46:48+08:00

    如果您还没有重新启动 Apache,请务必这样做,但如果您已经这样做了,您可以尝试运行自定义 PHP 脚本的全局输出过滤器来进行替换,看看是否出于某种原因解决了问题.

    编辑:根据您的评论,可能是因为内容被压缩,替代品不起作用。要关闭压缩,请将这些行添加到您的 VirtualHost:

    RequestHeader unset Accept-Encoding
    RequestHeader set Accept-Encoding identity
    

    如果这不起作用,请尝试以下操作:

    将这些添加到您的 conf 中,当然要更新路径:

    #add this outside of any VirtualHost tags
    ExtFilterDefine proxiedcontentfilter mode=output cmd="/usr/bin/php /var/www/proxyfilter.php"
    
    #add these in your VirtualHost tag
    RequestHeader unset Accept-Encoding 
    RequestHeader set Accept-Encoding identity
    SetOutputFilter proxiedcontentfilter
    

    在 proxyfilter.php 中有一些如下代码:

    #!/usr/bin/php
    <?php
    $html = file_get_contents('php://stdin');
    $html = str_ireplace('uat.site.co.jp', 'jp.uat.site2uk.co.uk', $html);
    file_put_contents('php://stdout', $html);
    

    如果这行得通,那么将焦点缩小到文本/html 内容,就像您在示例中所做的那样。

    • 9
  3. eckes
    2017-04-27T17:22:49+08:002017-04-27T17:22:49+08:00

    根据重写标题的https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxypassreverse,您使用“

    要重写 HTML 内容以匹配代理,您必须加载并启用 mod_proxy_html。

    • 1

相关问题

  • 持续监控许多服务器运行状况的简单方法?

  • Web 代理脚本与 http 代理的效率?

  • 为将笔记本电脑带回家的用户模拟公司代理

  • 什么是 Microsoft 代理客户端(MSP 客户端)

  • 使用大量 javascript 的页面上的鱿鱼速度很慢

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve