百度统计是一款稳定、专业的网站数据流量分析平台。百度统计提供流量统计、用户搜索的关键词等功能,结合百度使用非常契合。

在 Wagtail 项目中使用百度统计,安装百度统计代码后,检测百度统计代码的安装状态,可能会提示 “Referrer 被禁用” 错误。

本文将介绍如何解决 Wagtail 项目中百度统计 Referrer 被禁用错误。

百度统计Referrer被禁用原因分析

在 Wagtail 项目中默认启用了 Middleware (中间件) django.middleware.security.SecurityMiddleware,则在 Wagtail 项目中默认配置了 referrer policy。

Wagtail 项目中 referrer policy 使用 SECURE_REFERRER_POLICY 配置。如果你在 Wagtail 项目中没有显式配置 SECURE_REFERRER_POLICY,其默认值为 same-origin

默认 referrer policy 值 same-origin 是不能正常运行百度统计代码

百度统计Referrer被禁用解决方法

referrer policy取值分析

如果要使百度统计代码正常运行 referrer policy 的值可取 unsafe-url , strict-origin-when-cross-origin , origin-when-cross-origin , origin 其中的一个,建议设置的优先级如下:unsafe-url > strict-origin-when-cross-origin > origin-when-cross-origin > origin

Wagtail 项目建议使用的 referrer policy 值为 same-origin

百度统计代码正常运行建议使用的 referrer policy 值为 strict-origin-when-cross-origin

具体解决示例

1、配置 referrer policy 添加如下形式的 <meta> 标记:

<meta name="referrer" content="...">

2、解决百度统计Referrer被禁用的示例代码(在所有模板继承 base.html 文件中添加代码):

<head>
  <meta name="referrer" content="strict-origin-when-cross-origin">
  <script>
  var _hmt = _hmt || [];
  (function() {
    var hm = document.createElement("script");
    hm.src = "https://hm.baidu.com/hm.js?2isapfjw98l2usb8a8a4bf4412c6b7a1";
    var s = document.getElementsByTagName("script")[0];
    s.parentNode.insertBefore(hm, s);
  })();
  </script>
  <meta name="referrer" content="same-origin">

  ...

</head>

代码解释

  • <head> 标记开始位置添加百度统计代码,并且在百度统计代码的前面修改 referrer policy 的值为 strict-origin-when-cross-origin,在百度统计代码的后面修改为原来的 referrer policy 值,实现既能正常运行百度统计代码,又能满足 Wagtail 需要的安全设置。

结语

本文介绍了如何解决 Wagtail 项目中百度统计 Referrer 被禁用错误,提供的解决方法既能实现正常运行百度统计代码,又能满足 Wagtail 需要的安全设置。