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


ProxyPass & ProxyPassReverse - Get original URL from browser address bar

我创建了两个网站(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'];