]> git.mxchange.org Git - friendica.git/blobdiff - include/network.php
Redirects sometimes only seems to send the hostname and no path. "fetch_url" respects...
[friendica.git] / include / network.php
index 1ecee598cf414f4b8d3b0f4c85d4b7b123b083c3..df23c2549c8cff319fdc466c147bb21dfa96329c 100644 (file)
@@ -76,9 +76,17 @@ function fetch_url($url,$binary = false, &$redirects = 0, $timeout = 0, $accept_
        }
 
        if($http_code == 301 || $http_code == 302 || $http_code == 303 || $http_code == 307) {
-               $matches = array();
-               preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches);
-               $newurl = trim(array_pop($matches));
+               $new_location_info = @parse_url($curl_info["redirect_url"]);
+               $old_location_info = @parse_url($curl_info["url"]);
+
+               $newurl = $curl_info["redirect_url"];
+
+               if (($new_location_info["path"] == "") AND ($new_location_info["host"] != ""))
+                       $newurl = $new_location_info["scheme"]."://".$new_location_info["host"].$old_location_info["path"];
+
+               //$matches = array();
+               //preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches);
+               //$newurl = trim(array_pop($matches));
                if(strpos($newurl,'/') === 0)
                        $newurl = $url . $newurl;
                $url_parsed = @parse_url($newurl);