重定向后在PHP中获取浏览器的URL

时间:2015-07-02 16:05:16

标签: php url redirect curl

我有一个网址,例如xyz.com/123456。当我在浏览器中打开它时,url会被重定向到xyz.com/test_user,其中123456是用户ID,test_user是用户名。我想从第一个URL重定向后提取第二个URL。

我编写了一个脚本,可以从文本文件中获取不同用户ID的输入并生成第一个URL。我想在浏览器中或通过cmd以某种方式运行URL,并获取重定向的第二个URL。 我尝试在Curl中使用EFFECTIVE_URL,但它一直返回第一个URL。我也尝试了$ _SERVER,但它返回脚本文件而不是URL。

有什么办法可以让我在重定向后获得在浏览器窗口中输入的URL吗? 或者甚至可能没有在浏览器中打开URL我可以获得重定向的URL吗?

3 个答案:

答案 0 :(得分:0)

看看这个: Get url after redirect

答案 1 :(得分:0)

有三个设置可以帮助您更快地获取重定向网址(无需实际等待curl重定向您)

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); //don't follow the redirect
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // do return the transfer
curl_setopt($ch, CURLOPT_HEADER, true);         // do show the header

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); //either get the certificates, or just disable checking
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

然后,当您最终执行请求时,您可以从标头匹配中找到重定向。

$url = 'https://www.facebook.com/4?_rdr=p'; //remember to add ?_rdr=p to the end of your URL

$response = curl_exec($ch);
preg_match_all('/^Location:(.*)$/mi', $response, $matches);
print_r($matches);

您的网址应位于$matches[0]

答案 2 :(得分:0)

当您使用PHP重定向时 - 一种选择是在用户登陆时设置$_SESSION值,然后再重定向。 e.g

$_SESSION['original_url'] = $_SERVER[HTTP_HOST];

然后在您重定向到的页面上抓取:

$previous_url = $_SESSION['original_url'];

http://php.net/manual/en/book.session.php