$ _SERVER [' HTTP_REFERER'] - 如何与基本网址进行比较

时间:2015-06-25 07:02:24

标签: php http-referer

我试图比较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;
&#13;
&#13;

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

&#13;
&#13;
<?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;
&#13;
&#13;

3 个答案:

答案 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_urlhttp://php.net/manual/en/function.parse-url.php)解析这两个网址并比较结果?

答案 2 :(得分:0)

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

然后,您还可以使用$_SERVER['REQUEST_URI']获取网址的其余部分。