0

我们的任务是通过 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 进程队列。

提前致谢!

4

1 回答 1

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]

程序应该等待标准输入上的 URL 并将修改后的 URL 写入标准输出,只要确保在末尾放置一个 \n。在模块的文档中查找更多详细信息。

于 2013-10-31T14:23:05.600 回答