【问题标题】:What would cause PHP variables to be rewritten by the server?什么会导致 PHP 变量被服务器重写?
【发布时间】:2012-03-08 05:29:51
【问题描述】:

我的公司给了我一个虚拟机来安装网络软件。但是我遇到了一个相当奇怪的问题,如果 PHP 变量与特定模式匹配,服务器将覆盖(重写)它们。什么可以像这样重写 PHP 变量?

以下是一个完整的独立脚本。

<?php
$foo = 'b.domain.com';
echo $foo; // 'dev01.sandbox.b.domain.com'

$bar = 'dev01.sandbox.domain.com';
echo $bar; // 'dev01.sandbox.sandbox.domain.com'

$var = 'b.domainfoo.com';
echo $var; // 'b.domainfoo.com' (not overwritten because it didn't match whatever RegEx has been set)
?>

基本上任何包含子域并匹配域名的变量都会被重写。这不是 mod_rewrite 能够接触到的东西,所以它必须是服务器级别的东西,它解析 PHP 并在匹配正则表达式时重写字符串。

【问题讨论】:

  • 我会在服务器上的每个文件上搜索“沙盒”。
  • 如果你phpinfo()这台机器,你是不是看到了什么不正常的东西?
  • vm,你可以从源代码重新安装 php,但这是一个有趣的 :-)
  • @DustinGraham 我知道你在说什么,但这里不是这样,因为匹配是在域本身上完成的。我无法向您展示该域实际指向的内容,因为它位于内部网络上。 (相信我,无论如何它都无济于事)。为简单起见,匹配为([a-zA-Z\.]+).&lt;domain&gt;(或类似名称)并将其重写为:&lt;host&gt;.sandbox.(match).&lt;domain&gt;。然而,这不是问题。这里要问的问题是什么能够在输出上重写/覆盖 PHP 变量?我们找到了答案,我会在我回到办公室时发布。
  • 谁设置了环境?你问过他们吗?

标签: php apache url-rewriting redhat


【解决方案1】:

使用 mod_perl: PerlOutputFilterHandler 可以在 Apache 中覆盖输出。

可以将以下内容添加到 apache.conf 以设置输出过滤器:

<FilesMatch "\.(html?|php|xml|css)$">
    PerlSetVar Filter On
    PerlHandler MyApache2::FilterDomain
    PerlOutputFilterHandler MyApache2::FilterDomain
</FilesMatch>

过滤器处理程序代码示例:

#file:MyApache2/FilterDomain.pm
#--------------------------------
package MyApache2::FilterDomain;

use strict;
use warnings;

use Apache2::Filter();
use Apache2::RequestRec();
use APR::Table();

use Apache2::Const -compile => qw(OK);

use constant BUFF_LEN => 1024;

sub handler {
    my $f = shift;
    my @hostname = split(/\./, $f->r->hostname);
    my $new_hostname = $hostname[0].".".$hostname[1];

    unless ($f->ctx) {
        $f->r->headers_out->unset('Content-Length');
        $f->ctx(1);
    }

    while ($f->read(my $buffer, BUFF_LEN)) {
        $buffer =~ s/([a-z0-9]+)+\.domain\./$new_hostname\.$1.domain\./g;   
        $f->print($buffer);
    }

    return Apache2::Const::OK;
}
1;

更多关于 Apache mod_perl 过滤器的信息可以在这里找到:mod_perl: Input and Output Filters

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多