2016-07-25 131 views
2

我創建了兩個網站(http://localhost/webone,http://localhost/webtwo)。ProxyPass&ProxyPassReverse - 從瀏覽器地址欄獲取原始網址

網的兩個具有URL是這樣的:http://localhost/webtwo/webone(使用的ProxyPass和ProxyPassReverse)

如果我們去上面的網址,該網頁一個的是顯示內容。 。

現在,如果有人訪問網站之一,那麼我要趕用戶訪問的URL(這可能是 http://localhost/webonehttp://localhost/webtwo/webone

我的問題是:

如果有人訪問網頁兩名http://localhost/webtwo/webone URL。然後,如果我執行以下代碼,則返回http://localhost/webone

$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; 

但瀏覽器顯示的URL是http://localhost/webtwo/webone。有人可以請建議一種方法來趕上http://localhost/webtwo/webone的URL。

+0

你使用會話來存儲路徑? –

+0

嘗試'$ _SERVER [SCRIPT_NAME]' –

+0

@JeffPuckettII不工作 – user3099298

回答

1

您可以通過使用RequestHeader指令請求標題列表(右ProxyPass*後),添加自定義的請求頭:

RequestHeader add X-REQUEST-URI "expr=%{HTTP_HOST}%{REQUEST_URI}" 

這樣,您將有一個頭叫HTTP_X_REQUEST_URI,請求的URI的持有人並通過$_SERVER['HTTP_X_REQUEST_URI']是訪問:

'HTTP_X_REQUEST_URI' => string 'localhost/webtwo/webone' (length=23) 

也有一些頭,其被mod_proxy設定時,你可能魚翅d有用。從apache.org

當在反向代理模式(使用ProxyPass指令, 例如)作用,mod_proxy_http增加了幾個請求頭以 通信息到原始服務器。這些標頭是:

X-Forwarded-For客戶端的IP地址。

X-Forwarded-Host客戶端在Host HTTP請求標頭中請求的原始主機。

X-Forwarded-Server代理服務器的主機名。

0

ProxyPass添加X-Forwarded-Host標頭,其中包含原始主機,可通過php以$_SERVER['HTTP_X_FORWARDED_HOST']訪問。

您的代碼可以是這樣的:

$host = $_SERVER['HTTP_HOST']; 
if (!empty($_SERVER['HTTP_X_FORWARDED_HOST'])) { 
    $host = $_SERVER['HTTP_X_FORWARDED_HOST']; 
} 
$actual_link = "http://" . $host . $_SERVER['REQUEST_URI']; 
1

當你落後代理

使用$_SERVER['HTTP_X_FORWARDED_FOR']代替$_SERVER['REMOTE_ADDR']

使用$_SERVER['HTTP_X_FORWARDED_HOST']$_SERVER['HTTP_X_FORWARDED_SERVER']
到位$_SERVER['SERVER_NAME']

http://php.net/manual/de/reserved.variables.server.php

+0

爲了防止僞造,請檢查$ _SERVER ['REMOTE_ADDR']'是您的實際代理服務器的IP。另外,如果原始請求已包含它們,則X-header將包含多個值。最後一個以逗號分隔的值應該是來自(可信)代理的值。 [mod_proxy參考](http://httpd.apache.org/docs/current/mod/mod_proxy.html#x-headers) – Kontrollfreak

相關問題