0

Apache リバース プロキシのパラメータによって、URL の整合性をチェックするタスクが与えられます。そのうちの 1 つは、他の 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 に答える