我创建了两个网站(http://localhost/webone,http://localhost/webtwo)。
Web 2具有以下URL:http://localhost/webtwo/webone(使用ProxyPass和ProxyPassReverse)
如果我们转到上面的网址,则会显示网络内容的内容。
现在如果有人访问网络,那么我想抓住用户访问网址。(可能是 http://localhost/webone或http://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网址。
答案 0 :(得分:2)
当您落后代理:
时使用$_SERVER['HTTP_X_FORWARDED_FOR']
代替$_SERVER['REMOTE_ADDR']
使用$_SERVER['HTTP_X_FORWARDED_HOST']
和
$_SERVER['HTTP_X_FORWARDED_SERVER']
代替$_SERVER['SERVER_NAME']
答案 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'];