PHP检测url重定向的最终地址

原创 2016年05月31日 22:26:48

引言

客户需求, 需要判断一个url跳转后的url是否是目标url, 于是有此文, 惯例先贴代码.

代码

/**
 * 递归检测url重定向地址, 直到重定向到rule所指地址
 * 返回该地址
 *
 * @param string $url 待检测的地址
 * @param string $rule 匹配的地址
 * @return mixed
 */
function redirect($url, $rule = 'https://www.google.com/')
{
    $header = get_headers($url, 1);
    //print_r($header);
    if (strpos($header[0], '301') !== false || strpos($header[0], '302') !== false) {
        // 检测到跳转
        if (array_key_exists('Set-Cookie', $header)) {
            // 检测到cookie, 进行设置
            $cookies = $header['Set-Cookie'];
            foreach ($cookies as $k => $v) {
                header('Set-Cookie: ' . $v);
            }
        }
        if (array_key_exists('Location', $header)) {
            $url = $header['Location'];
            if (is_array($url)) {
                foreach ($url as $k => $v) {
                    if (strpos($v, $rule) !== false) {
                        // 跳转地址与$rule匹配, 返回该地址
                        return $v;
                    } else {
                        // 不匹配则访问一次中转网址
                        file_get_contents($v);
                    }
                }
            } else {
                if (strpos($url, $rule) !== false) {
                    // 跳转地址与$rule匹配, 返回该地址
                    return $url;
                }
            }
        }
    }
    return false;
}

小结

核心函数get_headers()
其余的就是常规的字符串判断函数.

版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)

php 获取301跳转后真实的url

在php采集中经常遇到有URL 301重定向的情况,如果出现了这样的情况,有可能出现造成未知的结果,因为主机名不一样了。我们的采集中主机名不能用301重定向前的URL,要用重定向之后的URL。 ...
  • heshxi
  • heshxi
  • 2014年08月08日 11:39
  • 2264

PHP获取重定向URL的几种方法

有时候我们会在开发中,经常会遇到有URL 301或 302重定向的情况,这时候我们可能需要获取重定向之后的url,下面我们介绍一下几种获取重定向url的方法: 1、用get_headers函数 ...
  • zimuxin
  • zimuxin
  • 2016年08月17日 10:58
  • 2021

PHP页面跳转与页面重定向详解

页面重定向一定会有页面跳转,页面跳转不一定会有页面重定向,也就是说页面重定向真包含于页面跳转,页面重定向是页面跳转的充分不必要条件。...
  • yhb241
  • yhb241
  • 2015年10月16日 16:10
  • 14346

php 版获取重定向后的地址

原文地址:http://www.oschina.net/code/snippet_95391_2196 02 //取重定向的地址...
  • th362cn
  • th362cn
  • 2013年02月10日 23:53
  • 857

php的URL重定向函数

// URL重定向 function redirect($url, $time=0, $msg='') { //多行URL地址支持 $url = str_replace(array("...
  • zhaoxuejie
  • zhaoxuejie
  • 2012年04月17日 15:43
  • 5345

PHP网址重定向,URL重写教程

  • 2016年11月10日 17:01
  • 153KB
  • 下载

PHP页面3中跳转方法

方法一:使用PHP自带函数 Header("Location: 网址");说明:必须在网页没有任何输出的时候执行,要特别要注意空格。去空格的方法参照如下第4问即,这句话要放在网页开始的时候,放在bod...
  • Iamduoluo
  • Iamduoluo
  • 2010年11月20日 20:29
  • 45245

PHP常见问题汇总

1、PHP代码中函数前面的@是什么意思?答:@的作用是忽略调用该函数时产生的错误信息。2、为什么出现“APACHE.EXE: cannot determine local host name.”? 答...
  • angelmelody
  • angelmelody
  • 2007年11月04日 23:06
  • 3582

iOS应用中URL地址如何重定向

就用一个很简单的例子 http://www.google.com谷歌的首页 都知道现在浏览器中打开google.com的话事实上会变成http://www.google.com...
  • majiakun1
  • majiakun1
  • 2013年12月15日 00:05
  • 2069

python 重定向获取真实url

楼主在做公司项目的时候遇到url重定向的问题,因此上网简单查找,作出如下结果由于使用的是语言是python所以以下是python的简单解决方案http_headers = { 'Accept': '*...
  • yanxiaobo1991
  • yanxiaobo1991
  • 2017年07月20日 15:01
  • 1525
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP检测url重定向的最终地址
举报原因:
原因补充:

(最多只允许输入30个字)