繁体   English   中英

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

[英]ProxyPass & ProxyPassReverse - Get original URL from browser address bar

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

第二个网站具有这样的URL: http:// localhost / webtwo / webone (使用ProxyPass和ProxyPassReverse)

如果我们转到上面的URL,那将显示Web的内容。

现在,如果有人访问网络,则我想捕获用户访问URL。(可以是http:// localhost / webonehttp:// localhost / webtwo / webone

我的问题是:

如果有人从http:// localhost / webtwo / webone URL访问网站2。 然后,如果我执行以下代码,它将返回http:// localhost / webone

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

但是浏览器的显示URL是http:// localhost / webtwo / webone 有人可以建议一种捕获http:// localhost / webtwo / webone URL的方法。

当您位于代理之后

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

您可以使用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代理服务器的主机名。

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'];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM