【问题标题】:PHP: Changing referer with header()PHP:使用 header() 更改引用者
【发布时间】:2025-11-21 11:20:07
【问题描述】:

为方便起见,我的 CMS 链接到其他网站,我想隐藏引荐来源网址,以便其他网站看不到我的 CMS 的目录和查询字符串。我现在有 CMS 链接到我服务器上的 PHP 文件 elswhere,该文件又通过 header() 重定向到链接,但引用者仍然来自我的 CMS,而不是来自链接的 PHP。还有……

header("Referer: nowhere");
header("Location: $_REQUEST[urltolinkto]");

... 似乎没有任何改变。无论我将什么作为引荐来源网址,它始终是我的 CMS 中用户实际点击链接的那个。

是否可以更改引用者(链接到 PHP),或者我必须使用 javascript 或元刷新?

【问题讨论】:

标签: php


【解决方案1】:

Referer 标头是浏览器发送到服务器的内容。您正在将响应从服务器更改为浏览器,因此不会以这种方式工作(与 Cookie 标头不同)。据我所知,您无法在服务器端控制浏览器在发送Referer 时的行为。

【讨论】:

    【解决方案2】:

    浏览器确实可以选择要发送的引荐来源网址,但有一些方法可以绕过它。

    HTML5 添加了元引用,大多数现代浏览器都会尊重它。只需添加

    <meta name="referrer" content="no-referrer">
    

    到您的网站的头部。

    还有重定向服务和其他隐藏引用的技巧(https 重定向、iframe tricks 和其他)。

    【讨论】:

      【解决方案3】:

      一个好的解决方案是简单地使用经典的&lt;META HTTP-EQUIV="REFRESH" CONTENT="0; URL=http://www.example.com/"&gt;

      事实上,Google Analytics 有一个专门针对这个问题的帮助页面,供询问网络跟踪无法处理重定向的用户使用,这里是:Support.Google.com -> Redirects: Place the tag on redirecting pages。他们很好地解释了这个问题:

      如果您的网站使用重定向,则重定向页面将成为着陆页的引荐来源网址。例如,如果您更改了网站,现在 index.html 会重定向到 home.html,那么 index.html 将成为 home.html 的引荐来源......

      因此,您应该将 Google Analytics(分析)代码放置在重定向页面和登录页面上。这样,重定向页面将捕获报告的实际引荐来源信息。

      所以,只需将header("Location...") 替换为大量打印语句即可。这感觉太不优雅。但它有效。

      注意:我还添加了canonical 属性,以便浏览器更清楚地了解重定向的意义。

      <?php
          $redirect_url = 'https://www.example.com';
          $google_analytics_configgtag = '12345, this is your api key';
          
          print('<!DOCTYPE HTML><HTML><HEAD>');
          print('<META HTTP-EQUIV="REFRESH" CONTENT="0; URL=' . $redirect_url . '"/>');
          print('<LINK REL="CANONICAL" HREF="' . $redirect_url . '"/>');
          
          if($google_analytics_configgtag) {
      ?>
      
          <!-- Global Site Tag (gtag.js) - Google Analytics -->
          <script async src="https://www.googletagmanager.com/gtag/js?id=<?php print($google_analytics->configgtag); ?>"></script>
          <script>
                window.dataLayer = window.dataLayer || [];
                function gtag(){dataLayer.push(arguments)};
                gtag('js', new Date());
              
                gtag('config', '<?php print($google_analytics_configgtag); ?>');
          </script>
      
      <?php
          }
      print('</HEAD>');
          print('<BODY></BODY></HTML>');
      ?>
      

      【讨论】:

        【解决方案4】:

        您无法真正从服务器端更改引荐来源网址,因为它是由浏览器提供给服务器的。

        但你可以使用 href.li 之类的服务,只需使用

         https://href.li/?http://<your-url>
        

        注意:http:// 之后?很重要,否则不会重定向。

        【讨论】: