将PHP的HTTP请求重新发送回Apache

时间:2013-10-25 13:22:16

标签: php apache http proxy reverse-proxy

我们的任务是通过apache反向代理上的参数检查URL的完整性。其中一个是由另外3个计算的哈希值。如果URL看起来完整,反向代理功能应该启动。我们的问题是我们不知道如何在检查回apache后重新路由来自php的请求,以便它继续/重新启动处理它。 /强>

我们尝试使用file_get_contents()启动一个新请求,但是它并没有很好地处理重定向并等待超时。

最好不要在php中重新实现反向代理,但让apache执行此操作。 我们的哈希检查如下所示:

<?php
    $ss=$_SERVER['QUERY_STRING'];
    parse_str($ss,$qa);
    if (array_key_exists('hash', $qa)&&array_key_exists('id1', $qa)&&array_key_exists('id2', $qa)&&array_key_exists('id3', $qa)) {
        $hstr=$qa['id1'].$qa['id2'].$qa['id3'];
        $hash=hash_hmac('md5',$hstr, '@#$%^&**&^@ key !@^&*&T^%$');
        if ($qa['hash']==$hash) {

这里我们应该做一些事情,以便php将请求传递回apache进程队列。

提前致谢!

1 个答案:

答案 0 :(得分:1)

解决方案是Apache的URL重写模块(mod_rewrite)。这可以将URL传递给外部程序来重写它,然后有条件地执行某些操作。例如:

RewriteEngine on
RewriteMap hash prg:/var/www/html/url.php
RewriteCond ${hash:%{QUERY_STRING}} !^.*hashis=bad$ [nocase]
RewriteRule ^/something/(.*)$ http://proxied.server:1234/$1 [proxy]
RewriteRule ^.*$ http://some.default.page [proxy]

程序应该等待stdin上的URL并在stdout上写入修改后的URL,确保在最后放置一个\ n。 在模块的文档中查找更多详细信息。