Browse Source

build_url: also put query parameters and fragment in resulting URL
rewrite_relative_url: simplify handling of relative URLs

Andrew Dolgov 4 days ago
parent
commit
88c4dc405e
1 changed files with 13 additions and 15 deletions
  1. 13 15
      include/functions.php

+ 13 - 15
include/functions.php

@@ -1511,7 +1511,12 @@
 	}
 
 	function build_url($parts) {
-		return $parts['scheme'] . "://" . $parts['host'] . $parts['path'];
+		$tmp = $parts['scheme'] . "://" . $parts['host'] . $parts['path'];
+
+		if (isset($parts['query'])) $tmp .= '?' . $parts['query'];
+		if (isset($parts['fragment'])) $tmp .= '#' . $parts['fragment'];
+
+		return $tmp;
 	}
 
 	/**
@@ -1537,23 +1542,16 @@
 		} else {
 			$parts = parse_url($url);
 
-			if (!isset($parts['path'])) {
-				$parts['path'] = '/';
-			}
-
-			$dir = $parts['path'];
-
-			if (substr($dir, -1) !== '/') {
-				$dir = dirname($parts['path']);
-				$dir !== '/' && $dir .= '/';
-			}
+			$rel_parts['host'] = $parts['host'];
+			$rel_parts['scheme'] = $parts['scheme'];
 
-			$parts['path'] = $dir . $rel_url;
+			if (strpos($rel_parts['path'], '/') !== 0)
+				$rel_parts['path'] = '/' . $rel_parts['path'];
 
-			$parts['path'] = str_replace("/./", "/", $parts['path']);
-			$parts['path'] = str_replace("//", "/", $parts['path']);
+			$rel_parts['path'] = str_replace("/./", "/", $rel_parts['path']);
+			$rel_parts['path'] = str_replace("//", "/", $rel_parts['path']);
 
-			return validate_url(build_url($parts));
+			return validate_url(build_url($rel_parts));
 		}
 	}