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

时间:2016-07-25 09:26:08

标签: php apache

我创建了两个网站(http://localhost/webonehttp://localhost/webtwo)。

Web 2具有以下URL:http://localhost/webtwo/webone(使用ProxyPass和ProxyPassReverse)

如果我们转到上面的网址,则会显示网络内容的内容。

现在如果有人访问网络,那么我想抓住用户访问网址。(可能是 http://localhost/webonehttp://localhost/webtwo/webone

我的问题是:

如果有人从http://localhost/webtwo/webone网址访问网络二。然后,如果我执行以下代码,则返回http://localhost/webone

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

但浏览器显示网址为http://localhost/webtwo/webone。有人可以建议一种方法来捕获http://localhost/webtwo/webone网址。

3 个答案:

答案 0 :(得分:2)

当您落后代理

使用$_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

答案 1 :(得分: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设置,您可能会觉得有用。来自apache.org

  

以反向代理模式运行时(使用ProxyPass指令,   例如),mod_proxy_http添加了几个请求标头   将信息传递给原始服务器。这些标题是:

     

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

     

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

     

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

答案 2 :(得分: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'];