$_SERVER['HTTP_REFERER'] - 如何使 if 与基础 url 进行比较

$_SERVER['HTTP_REFERER'] - how to make if to compare with base url

我正在尝试比较 HTTP_REFERER 和我的基础值 url 的值。怎么做?如果我这样写,它不会显示后退按钮。如果我使用我项目的整个 url: http://localhost/myproject/index.php/home/index 它有效,但我想比较 base url - 不要为每个页面写很多 if 条件。我该怎么做?

<?php 
if ((isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']) )) {
    if ($_SERVER['HTTP_REFERER'] ==  'http://localhost:/myproject/') {
        echo '<a type="button" onclick="history.back(-1);">Back</a>';
    }
}

已编辑:以这种方式工作,但显示此警告: 消息:strtolower() 期望参数 1 为字符串,数组给定 如何解决?

<?php
if ((isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']) )) { $referer = $_SERVER['HTTP_REFERER']; $current = 'localhost:/myproject/';
$ref =parse_url($referer); $my=parse_url($current);
if (strtolower($ref) === strtolower($my)) { echo '<a type="button" onclick="history.back(-1);">Back</a>'; } }

尝试以下操作:

if ((isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']) )) {
    $referer = $_SERVER['HTTP_REFERER'];
    $current = 'http://localhost:/myproject/'; // Do you mean for the : to be here?

    $refererBaseUrl = trim(preg_replace('/\?.*/', '', $referer), '/');
    $currentBaseUrl = trim(preg_replace('/\?.*/', '', $current), '/');

    if (strtolower($refererBaseUrl) === strtolower($currentBaseUrl)) {
        echo '<a type="button" onclick="history.back(-1);">Back</a>';
    }
}

这是我用来比较基本 URL 的基本技术。

编辑:

如何使用 parse_url (http://php.net/manual/en/function.parse-url.php) 来解析两个 URL 并比较结果?

您可以使用 $_SERVER['HTTP_HOST'] 获取基数 URL 您可能需要将 http/https 附加到字符串。

您还可以使用 $_SERVER['REQUEST_URI'] 获得 URL 的剩余部分。

检查 HTTP_REFERER 中是否包含您的域。

if (isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], 'localhost/myproject' !== false))
{
  echo '<a type="button" onclick="history.back(-1);">Back</a>';
}