如何确定 URL 是不是在 PHP 中重定向?

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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 重定向。

以上是关于如何确定 URL 是不是在 PHP 中重定向?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Codeigniter 中重定向和删除 index.php [重复]

在laravel中重定向到外部url时如何保留会话数据

如何在PHP中重定向到同一页面

在codeigniter的htaccess中重定向url

如何在 Django 中重定向到外部 URL?

如何在 Django 中重定向(包括 URL 更改)?