我创建了两个网站(http://localhost/webone,http://localhost/webtwo)。
Web二的URL如下:http://localhost/webtwo/webone(使用ProxyPass和ProxyPassReverse)
如果我们转到上面的URL,它将显示网页的内容。
现在,如果有人访问网络一,那么我想捕捉用户访问URL。(可能是http://localhost/webone或http://localhost/webtwo/webone)
我的问题是:
如果有人从http://localhost/webtwo/weboneURL。然后,如果我执行以下代码,它会返回http://localhost/webone.
$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
但浏览器显示URLhttp://localhost/webtwo/webone.有人能建议一下抓鱼的方法吗http://localhost/webtwo/weboneURL。
您可以使用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:
当以反向代理模式(使用CCD_ 5指令,例如),
mod_proxy_http
添加了几个请求头以便将信息传递给源服务器。这些标题是:X-Forwarded-For客户端的IP地址。
X-Forwarded-Host客户端在Host HTTP请求标头中请求的原始主机。
X-Forwarded-Server代理服务器的主机名。
当您使用代理时:
使用$_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
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'];