$_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>';
}
我正在尝试比较 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>';
}