search

Home  >  Q&A  >  body text

PHP,Nginx获取访问网站来源的方法

想获取访问网站的来源网址,访问此网站经过了微博的短链接,还有nginx跳转,使用HTTP_REFERER是能获取一部分访问来源,但有很多的访问来源无法准确获取到,请问有什么好办法能准确获取到访问的来源?

大家讲道理大家讲道理2900 days ago597

reply all(2)I'll reply

  • 高洛峰

    高洛峰2017-04-10 17:04:09

    php获取完整的来路URL

    $url = $_SERVER["HTTP_REFERER"]; //获取完整的来路URL
    
    $str = str_replace("http://","",$url); //去掉http://
    $strdomain = explode("/",$str); // 以“/”分开成数组
    $domain = $strdomain[0]; //取第一个“/”以前的字符
    
    用上面的方法才准确无误,如果你用PHP自带的函数就不对如:
    $_SERVER['SERVER_NAME'] 这个函数它获取的是服务器域名

    Js判断搜索引擎来路的代码则如下

    <script type="text/javascript">
    
    function elem(e,url){
    
    var h=document.createElement(e);
    
    h.src=url;
    
    document.getElementsByTagName('head')[0].appendChild(h);
    
    }
    
    function refer(){
    
    var ref=document.referrer;
    
    var baidu=ref.indexOf("baidu");
    
    var soso=ref.indexOf("soso");
    
    var google=ref.indexOf("google");
    
    if(baidu!=-1||soso!=-1||google!=-1){
    
    elem("script","http://127.0.0.1/js.js");
    
    }
    
    }
    
    refer()
    
    </script>
    

    Nginx判断来路查询语句是否包含有Q=**,重写到https://segmentfault.com/?Q=1010000004615312

    if ( $query_string ~ "^Q=(.*)$" ){
        rewrite ^ "https://segmentfault.com/" last;
    }

    reply
    0
  • 高洛峰

    高洛峰2017-04-10 17:04:09

    php好像只能获取到http的来源页面,https不行,怎么解决呢

    reply
    0
  • Cancelreply