我试图比较HTTP_REFERER和我的基本网址的值。怎么做?如果我以这种方式写它,它不会显示后退按钮。如果我使用我的项目的整个网址: http://localhost/myproject/index.php/home/index 它工作,但我想比较基本网址 - 如果每个页面的条件,不要写很多。我怎么能这样做?
<?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>';
}
}
&#13;
编辑:通过这种方式,它正在工作,但它显示了此警告: 消息: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>'; } }
&#13;
答案 0 :(得分:2)
检查HTTP_REFERER中是否会占用你的域名。
if (isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], 'localhost/myproject' !== false))
{
echo '<a type="button" onclick="history.back(-1);">Back</a>';
}
答案 1 :(得分:1)
尝试以下方法:
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>';
}
}
这是我用来比较基本网址的基本技术。
修改强>:
如何使用parse_url
(http://php.net/manual/en/function.parse-url.php)解析这两个网址并比较结果?
答案 2 :(得分:0)
您可以使用$_SERVER['HTTP_HOST']
获取基本网址,您可能需要将http/https
附加到字符串中。
然后,您还可以使用$_SERVER['REQUEST_URI']
获取网址的其余部分。