【问题标题】:Getting the URL of browser in PHP after redirection重定向后在PHP中获取浏览器的URL
【发布时间】:2015-09-20 06:34:43
【问题描述】:

我有一个网址,例如 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?

【问题讨论】:

  • 尝试使用 print_r($_SERVER);并检查
  • 我认为你可以使用$_SERVER["REDIRECT_URL"] 或类似的东西。只需转储$_SERVER 并检查。
  • 你是用 .htaccess 还是 PHP 重定向它?
  • REDIRECT_URL 不起作用。它给了我本地地址
  • @JohnnyFaldo,我正在使用 php 进行重定向。我在标题中作为输入提供的链接再次被重定向。我需要那个网址

标签: php url redirect curl


【解决方案1】:

有三个设置可以帮助您更快地获得重定向 URL(无需实际等待 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);

然后,当你最终执行请求时,你可以从一个 header 匹配中找到重定向。

$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]

【讨论】:

  • $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $content); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); // Must be set to true so that PHP follows any "Location:" header curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); // $a will contain all headers preg_match_all('/^Location:(.*)$/mi', $response, $matches); $url = $matches[0]; echo $url;
  • 我使用了这个代码。但它现在在最后一个回显时给了我数组到字符串错误。 :(
  • 您应该echo $matches[0],尝试print_r($matches) 也可以查看所有网址。
  • print_r($matches) 给我以下输出。 " ( [0] => 数组 ( ) [1] => 数组 ( ) ) "
  • 您确定网站给您的是 HTTP 重定向,而不是元或 JavaScript 重定向?您可以发布有问题的网址吗?
【解决方案2】:

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

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

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

$previous_url = $_SESSION['original_url'];

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

【讨论】:

  • 当我在本地主机上运行脚本时。这只会返回本地主机地址
【解决方案3】:

看看这个: Get url after redirect

【讨论】:

    猜你喜欢
    • 2013-04-27
    • 1970-01-01
    • 2017-05-02
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 2012-09-16
    相关资源
    最近更新 更多