2013-10-25 81 views
0

我們有權通過apache反向代理上的參數來檢查URL的完整性。其中一個是從另外3個計算出來的散列。如果URL看起來完好無損,則反向代理功能應該啓用。我們的問題是,我們不知道如何在檢查回apache之後重新路由來自php的請求,以便繼續/重新開始處理它。將來自PHP的HTTP請求重新路由到Apache

我們試圖用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 [email protected]^&*&T^%$'); 
     if ($qa['hash']==$hash) { 

,在這裏我們應該做的東西,所以PHP將請求傳遞迴Apache進程隊列。

在此先感謝!

+0

爲了澄清一下,一旦PHP檢查了給定的URL,是否希望客戶端直接訪問URL?這可以通過'header('Location:...')來實現嗎?'這樣客戶端瀏覽器就會被重定向到URL? – plasmid87

+0

不,不應該在沒有散列的情況下訪問服務,因此在檢查之後我們需要反向代理功能。 – Diepie

+0

據我所知,沒有辦法執行PHP/CGI腳本,然後將請求傳回Apache以使用其代理模塊進行處理。在此設置中,PHP本身充當授權代理和反向代理。 – plasmid87

回答

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和寫在標準輸出上修改過的網址,只要確保你把一個\ n結尾。 在模塊的文檔中找到更多詳細信息。