Php ProxyPass&;ProxyPassReverse-从浏览器地址栏获取原始URL
我已经创建了两个网站(,) Web2的URL如下:(使用ProxyPass和ProxyPassReverse) 若我们转到上面的URL,它将显示web one的内容 现在,如果有人访问WebOne,那么我想捕获用户访问URL 或) 我的问题是: 如果有人从URL访问web 2。然后,如果我执行以下代码,它将返回Php ProxyPass&;ProxyPassReverse-从浏览器地址栏获取原始URL,php,apache,Php,Apache,我已经创建了两个网站(,) Web2的URL如下:(使用ProxyPass和ProxyPassReverse) 若我们转到上面的URL,它将显示web one的内容 现在,如果有人访问WebOne,那么我想捕获用户访问URL 或) 我的问题是: 如果有人从URL访问web 2。然后,如果我执行以下代码,它将返回 但浏览器显示URL是。有人能建议一种方法来捕捉URL吗 ProxyPass添加了X-Forwarded-Host头,该头包含原始主机,在php中可作为$\u服务器['HTTP\u X\u
但浏览器显示URL是。有人能建议一种方法来捕捉URL吗 ProxyPass添加了
X-Forwarded-Host
头,该头包含原始主机,在php中可作为$\u服务器['HTTP\u X\u Forwarded\u 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'];
当您在代理之后时: 使用
$\u服务器['HTTP\u X\u FORWARDED\u']
代替$\u服务器['REMOTE\u ADDR']
使用
$\u服务器['HTTP\u X\u转发的\u主机]
和
$\u服务器['HTTP\u X\u转发的\u服务器']
代替
$\u服务器['SERVER\u NAME']
您可以使用指令添加自定义请求头列表(就在
ProxyPass*
之后):
这样,您将有一个名为HTTP\u X\u REQUEST\u URI
的头,它是请求URI的持有者,可以通过$\u服务器['HTTP\u X\u REQUEST\u URI']
访问:
'HTTP_X_REQUEST_URI' => string 'localhost/webtwo/webone' (length=23)
还有一些标题是由mod_proxy
设置的,您可能会发现它们很有用。发件人:
在反向代理模式下操作时(使用ProxyPass
指令,
例如,mod\u proxy\u http
添加几个请求头以
将信息传递给源服务器。这些标题是:
X-Forwarded-For客户端的IP地址
X-Forwarded-Host客户端在主机HTTP请求头中请求的原始主机
X-Forwarded-Server代理服务器的主机名
您是否使用会话来存储路径?请尝试
$\u服务器[SCRIPT\u NAME]
@JeffPuckettII不工作您是否使用任何可能干扰请求URI
值的框架?我猜您使用的是Apache web服务器?@chrki我没有使用任何框架,是的,我使用的是Apache web服务器(xampp),为了防止伪造,请检查$\u server['REMOTE\u ADDR']
是否是您实际代理的IP。此外,如果原始请求已经包含X头,则X头将包含多个值。最后一个逗号分隔的值应该是来自(受信任的)代理的值。
RequestHeader add X-REQUEST-URI "expr=%{HTTP_HOST}%{REQUEST_URI}"
'HTTP_X_REQUEST_URI' => string 'localhost/webtwo/webone' (length=23)