PHP:如何获取引荐来源网址?

Posted

技术标签:

【中文标题】PHP:如何获取引荐来源网址?【英文标题】:PHP: How to get referrer URL? 【发布时间】:2022-01-04 16:58:55 【问题描述】:

我有一个页面 (index.php),客户可以在其中向我发送电子邮件。现在我想看看访问者来自哪个网站。

如何使用 PHP 获取 Referrer URL?我试过了 $_SERVER['HTTP_REFERER'] 但它一直是空的。我需要考虑什么变量?

这是我的$_SERVER 包含的内容;出于隐私考虑,我放了一些---- CENSORED ----,实际上有真正的价值。

array(31) 
  ["DOCUMENT_ROOT"]=>
  string(33) "/home/anything/public_html/design"
  ["GATEWAY_INTERFACE"]=>
  string(7) "CGI/1.1"
  ["HTTP_ACCEPT"]=>
  string(129) "text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1"
  ["HTTP_ACCEPT_ENCODING"]=>
  string(13) "gzip, deflate"
  ["HTTP_ACCEPT_LANGUAGE"]=>
  string(14) "en-US,en;q=0.9"
  ["HTTP_CACHE_CONTROL"]=>
  string(8) "no-cache"
  ["HTTP_CONNECTION"]=>
  string(10) "Keep-Alive"
  ["HTTP_COOKIE"]=>
  string(189) "__utma=76630272.1468291432.1367655794.1367669576.1367674157.3; __utmb=76630272.1.10.1367674157; __utmc=76630272; __utmz=76630272.1367655794.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)"
  ["HTTP_HOST"]=>
  string(25) " ---- CENSORED ---- "
  ["HTTP_USER_AGENT"]=>
  string(57) "Opera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.15"
  ["PATH"]=>
  string(13) "/bin:/usr/bin"
  ["QUERY_STRING"]=>
  string(0) ""
  ["REDIRECT_STATUS"]=>
  string(3) "200"
  ["REMOTE_ADDR"]=>
  string(10) "5.15.68.79"
  ["REMOTE_PORT"]=>
  string(5) "57897"
  ["REQUEST_METHOD"]=>
  string(3) "GET"
  ["REQUEST_URI"]=>
  string(12) "/referer.php"
  ["SCRIPT_FILENAME"]=>
  string(45) "/home/anything/public_html/design/referer.php"
  ["SCRIPT_NAME"]=>
  string(12) "/referer.php"
  ["SERVER_ADDR"]=>
  string(13) " ---- CENSORED ---- "
  ["SERVER_ADMIN"]=>
  string(35) " ---- CENSORED ---- "
  ["SERVER_NAME"]=>
  string(25) " ---- CENSORED ---- "
  ["SERVER_PORT"]=>
  string(2) "80"
  ["SERVER_PROTOCOL"]=>
  string(8) "HTTP/1.1"
  ["SERVER_SIGNATURE"]=>
  string(189) "
Apache/2.2.19 (Unix) mod_ssl/2.2.19 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 Server at ---- CENSORED ---- Port 80

"
  ["SERVER_SOFTWARE"]=>
  string(125) "Apache/2.2.19 (Unix) mod_ssl/2.2.19 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635"
  ["UNIQUE_ID"]=>
  string(24) "UYUNcUPeiDsAABkR2eYAAAAj"
  ["PHP_SELF"]=>
  string(12) "/referer.php"
  ["REQUEST_TIME"]=>
  int(1367674225)
  ["argv"]=>
  array(0) 
  
  ["argc"]=>
  int(0)

【问题讨论】:

How can i use $_SERVER['HTTP_REFERER'] to find that user came from google?的可能重复 【参考方案1】:

下划线。不是空间。

$_SERVER['HTTP_REFERER']

【讨论】:

而且肯定不能直接访问,比如没有referrer?抱歉,请务必确认。 我试图从一个有直接链接的网站访问我的页面,但它仍然是空的。 还要确保拼写错误,哈哈。实际的官方变量是一个错字。它应该说REFERER 而不是REFERRER 你应该尝试转储整个$_SERVER var,并确保你从中得到了一些东西。 我在上面贴了整个$_SERVER【参考方案2】:

$_SERVER['HTTP_REFERER'] 会给你推荐页面的 URL(如果有的话)。如果用户使用书签或通过手动输入 URL 直接访问您的站点,则 http_referer 将为空。此外,如果 用户 以编程方式 (CURL) 发布到您的页面,那么他们也没有义务设置 http_referer。你错过了所有_,是错字吗?

【讨论】:

如果我使用 http_refrer 并在新标签页中打开,那么我们是否有可能丢失 http_referer 值??? 不,它不会影响HTTP_REFERER 的值。 请改进您的描述,是否是浏览器在 HTTP 请求标头中发送此内容。还要添加另一种情况,即浏览器不会在请求中发送引荐来源网址,即在 https 页面上单击 http 链接时。在这里解释得更好:developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer【参考方案3】:

如果$_SERVER['HTTP_REFERER'] 变量似乎不起作用,那么您可以使用Google Analytics 或AddThis Analytics。

【讨论】:

Analytics 显然是一个更好的解决方案。这里的服务器变量显然有些奇怪。此外,http-referer 很容易被操纵。【参考方案4】:
$_SERVER['HTTP_REFERER'];

但是,如果您通过直接在浏览器中点击 URL 来运行文件(包含上述代码),则会出现以下错误。

注意:未定义索引:HTTP_REFERER

【讨论】:

以上是关于PHP:如何获取引荐来源网址?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 playframework 中获取引荐来源网址

如何在 ASP.NET MVC 操作中获取引荐来源网址?

在 ASP.NET 中获取 HTTP 引荐来源网址

如何在Unity3d游戏中检索Android安装引荐来源网址

PHP HTTP 引荐来源网址

如何将自定义引荐来源发送到网址?