You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在CodeIgniter中获取用户访问的原始来源URL可行性咨询

获取用户访问的原始来源路径(A.com→B.com→xyz.com)

首先得给你泼个冷水:仅通过服务器端(包括.htaccess)或者原生HTTP机制,是没办法直接获取到最开始的A.com的,原因很简单:

浏览器的Referer(注意是拼写错误的Referer,不是Referrer)请求头,只会记录用户跳转过来的直接上一个站点,也就是B.com。这是HTTP协议的设计,同时也是浏览器隐私保护的一部分——浏览器不会把用户的整个浏览历史链暴露给网站,所以xyz.com根本收不到A.com的信息。

那有没有替代方案?分两种情况来看:

情况1:中间站点B.com是你可控的

这是唯一可行的路径:在B.com跳转到xyz.com的时候,主动把B.com自己的Referer(也就是A.com)作为参数传递过去。比如:

  • 在B.com的后端代码里生成跳转链接:
    <a href="https://xyz.com/?original_referrer=<?php echo urlencode($_SERVER['HTTP_REFERER']); ?>">跳转到xyz.com</a>
    
  • 或者用前端JS实现跳转:
    const originalReferrer = encodeURIComponent(document.referrer);
    window.location.href = `https://xyz.com/?original_referrer=${originalReferrer}`;
    

然后在xyz.com这边,就可以通过$_GET['original_referrer']拿到A.com的地址了。

情况2:中间站点B.com不可控

这种情况下,没有任何可靠的方法能获取到A.com。别浪费时间尝试了:

  • JavaScript的window.history对象受同源策略严格限制,根本读不到跨域的历史记录;
  • 任何服务器端配置(包括.htaccess)都只能处理请求头里已有的信息,而请求头里根本没有A.com的痕迹;
  • 第三方追踪工具也做不到,因为浏览器的隐私机制会阻止这类信息泄露。

关于.htaccess的补充说明

.htaccess是Apache用来处理请求规则的配置文件,它能操作的都是HTTP请求的现有信息——比如修改请求头、重写URL等等,但它没法凭空生成不存在的请求头数据。既然请求里没有A.com的任何信息,.htaccess自然也帮不上忙。

总结一下:只有当你能控制中间跳转的B.com时,才能通过传递参数的方式拿到原始来源A.com;否则,这个需求从技术上是无法实现的。

内容的提问来源于stack exchange,提问作者Asif Alamgir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:53:01