我正在尝试使用 PHP $_SERVER['HTTP_REFERER'] 覆盖 Yoast 面包屑,但出现索引错误

问题描述 投票:0回答:1

我收到未定义的数组错误。这里的目标是覆盖第二个链接以简单地返回一页。一个例子是

自定义模板 > 类别 > 模板

我添加了以下代码来劫持面包屑结构。 Yoast 不断将 /blog 添加到 url 中,这是自定义帖子类型。我的黑客正在工作,但是我在服务器上收到错误:

PHP 警告:未定义的数组键“HTTP_REFERER”

add_filter('wpseo_breadcrumb_links', 'wpse_332125_breadcrumbs');
function wpse_332125_breadcrumbs($links) {
    if(is_singular('custom-template')) {
        $links[2] = array(
            'text' => 'Category',
            'url' => $_SERVER['HTTP_REFERER'],
            'allow_html' => 2
        );
    }
    return $links;
}
php breadcrumbs http-referer yoast
1个回答
0
投票

Referer
HTTP 请求标头由浏览器提供。伪造起来很简单,但它也可以指向链接到您网站的第三方网站。出于安全/隐私原因,某些工具(浏览器扩展、防火墙...)将其完全剥离。而且您不能总是信任中间代理来传递标头。

说的是...如果你想使用它,你需要覆盖几种情况:

  • 标题完全丢失
  • 值不包含格式正确的完整绝对 URL
  • URL 属于外部站点
  • 用户实际上并非来自该 URL

从技术角度来看,这些问题并不难处理(您有 isset()parse_url()str_starts_with()...),但其中一些需要就功能做出一些决定和安全。

替代或补充这一点的可能替代方案:

  • 在服务器端存储(会话、数据库...)中跟踪自己访问的页面。这是可靠且灵活的,但可能不太适合多选项卡浏览。
  • 使其成为客户端功能并使用 JavaScript 实现它,使用浏览器历史记录中的数据(例如 tabs.goBack())。
  • 什么也不做,并教育用户使用浏览器的后退按钮。根据我的经验,这是大多数用户通常熟悉的东西。
© www.soinside.com 2019 - 2024. All rights reserved.