【问题标题】:How can I determine if a URL redirects in PHP?如何确定 URL 是否在 PHP 中重定向?
【发布时间】:2010-09-30 10:39:03
【问题描述】:

我看到有人问一个关于检测 URL 是否从 groovy 和 perl 重定向但在 PHP 上找不到任何东西的问题。

有人知道我可以在哪里找到执行此操作的代码吗?

【问题讨论】:

    标签: php url rewrite


    【解决方案1】:
    $ch = curl_init('http://www.yahoo.com/');
    curl_exec($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    if (($code == 301) || ($code == 302)) {
      //This was a redirect
    }
    

    【讨论】:

    • 酷 - 有没有办法告诉它要重定向到哪里?
    • 尝试正常的 cURL 到它...它应该引导你到它想让你去的地方。
    • 很好的答案,应该涵盖几乎所有可能的情况。我相信 303 和 307 也构成重定向,尽管它们不太常见 - 我只看到它们在规范文档中使用,而不是在现实世界中使用。
    • 值得注意的是,如果您想执行$data = curl_exec($ch) 之类的操作,而不是将结果发送到浏览器,则需要添加curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    【解决方案2】:

    实际上,我发现这个效果最好:

        function GetURL($URL)
        {
                $ch = curl_init($URL);
    
                curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
    
    
                curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    
                curl_exec($ch);
    
                $code = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
    
                curl_close($ch);
    
                return $code;
        }
    

    【讨论】:

      【解决方案3】:

      请记住,通常针对这个问题给出的答案都没有考虑到由在返回的文档中编码的 javascript 引起的重定向(或者我认为 HTML 中的元刷新标记。)所以无论如何都有可能使用此类代码进行测试时,您会错过某些类型的“重定向”。

      不幸的是,解决此问题的唯一方法是让实际的网络浏览器访问网页,并以报告 javascript 和元刷新重定向的方式修改网络浏览器。

      干杯!

      【讨论】:

      • 其实你可以使用 mozilla 的 javascript 引擎,虽然我现在不记得它的名字了。但是,是的,你说得对,curl 不会捕获 javascript 重定向。
      猜你喜欢
      • 1970-01-01
      • 2013-02-13
      • 1970-01-01
      • 2010-09-24
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 2016-02-05
      相关资源
      最近更新 更多