Php ProxyPass&;ProxyPassReverse-从浏览器地址栏获取原始URL

Php ProxyPass&;ProxyPassReverse-从浏览器地址栏获取原始URL,php,apache,Php,Apache,我已经创建了两个网站(,) Web2的URL如下:(使用ProxyPass和ProxyPassReverse) 若我们转到上面的URL,它将显示web one的内容 现在,如果有人访问WebOne,那么我想捕获用户访问URL 或) 我的问题是: 如果有人从URL访问web 2。然后,如果我执行以下代码,它将返回 但浏览器显示URL是。有人能建议一种方法来捕捉URL吗 ProxyPass添加了X-Forwarded-Host头,该头包含原始主机,在php中可作为$\u服务器['HTTP\u X\u

我已经创建了两个网站(,)

Web2的URL如下:(使用ProxyPass和ProxyPassReverse)

若我们转到上面的URL,它将显示web one的内容

现在,如果有人访问WebOne,那么我想捕获用户访问URL 或)

我的问题是:

如果有人从URL访问web 2。然后,如果我执行以下代码,它将返回


但浏览器显示URL是。有人能建议一种方法来捕捉URL吗

ProxyPass添加了
X-Forwarded-Host
头,该头包含原始主机,在php中可作为
$\u服务器['HTTP\u X\u Forwarded\u 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'];

当您在代理之后时

使用
$\u服务器['HTTP\u X\u FORWARDED\u']
代替
$\u服务器['REMOTE\u ADDR']


使用
$\u服务器['HTTP\u X\u转发的\u主机]
$\u服务器['HTTP\u X\u转发的\u服务器']

代替
$\u服务器['SERVER\u NAME']


您可以使用指令添加自定义请求头列表(就在
ProxyPass*
之后):

这样,您将有一个名为
HTTP\u X\u REQUEST\u URI
的头,它是请求URI的持有者,可以通过
$\u服务器['HTTP\u X\u REQUEST\u URI']
访问:

'HTTP_X_REQUEST_URI' => string 'localhost/webtwo/webone' (length=23)
还有一些标题是由
mod_proxy
设置的,您可能会发现它们很有用。发件人:

在反向代理模式下操作时(使用
ProxyPass
指令, 例如,
mod\u proxy\u http
添加几个请求头以 将信息传递给源服务器。这些标题是:

X-Forwarded-For客户端的IP地址

X-Forwarded-Host客户端在主机HTTP请求头中请求的原始主机

X-Forwarded-Server代理服务器的主机名


您是否使用会话来存储路径?请尝试
$\u服务器[SCRIPT\u NAME]
@JeffPuckettII不工作您是否使用任何可能干扰
请求URI
值的框架?我猜您使用的是Apache web服务器?@chrki我没有使用任何框架,是的,我使用的是Apache web服务器(xampp),为了防止伪造,请检查
$\u server['REMOTE\u ADDR']
是否是您实际代理的IP。此外,如果原始请求已经包含X头,则X头将包含多个值。最后一个逗号分隔的值应该是来自(受信任的)代理的值。
RequestHeader add X-REQUEST-URI "expr=%{HTTP_HOST}%{REQUEST_URI}"
'HTTP_X_REQUEST_URI' => string 'localhost/webtwo/webone' (length=23)