From 88b934da8bec70da1400525748336c0b71864b1a Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Fri, 4 Feb 2022 15:41:20 +0100 Subject: Fix root redirection (#4167) * Fix root redirection #fix https://github.com/FreshRSS/FreshRSS/issues/4126 * Smarter --- lib/Minz/Request.php | 17 ++++++++--------- lib/Minz/Url.php | 2 +- p/index.php | 6 ++++++ 3 files changed, 15 insertions(+), 10 deletions(-) create mode 100644 p/index.php diff --git a/lib/Minz/Request.php b/lib/Minz/Request.php index ee3962615..d67e23fdf 100644 --- a/lib/Minz/Request.php +++ b/lib/Minz/Request.php @@ -147,9 +147,9 @@ class Minz_Request { /** * Try to guess the base URL from $_SERVER information * - * @return string base url (e.g. http://example.com/) + * @return string base url (e.g. http://example.com) */ - public static function guessBaseUrl() { + public static function guessBaseUrl(): string { $protocol = self::extractProtocol(); $host = self::extractHost(); $port = self::extractPortForUrl(); @@ -225,12 +225,11 @@ class Minz_Request { return ''; } - /** - * @return string - */ - private static function extractPath() { - if ('' != $path = ($_SERVER['REQUEST_URI'] ?? '')) { - return '/' === substr($path, -1) ? substr($path, 0, -1) : dirname($path); + private static function extractPath(): string { + $path = $_SERVER['REQUEST_URI'] ?? ''; + if ($path != '') { + $path = parse_url($path, PHP_URL_PATH); + return substr($path, -1) === '/' ? rtrim($path, '/') : dirname($path); } return ''; } @@ -343,7 +342,7 @@ class Minz_Request { $url['params']['rid'] = self::requestId(); if ($redirect) { - header('Location: ' . Minz_Url::display($url, 'php')); + header('Location: ' . Minz_Url::display($url, 'php', 'root')); exit(); } else { self::_controllerName($url['c']); diff --git a/lib/Minz/Url.php b/lib/Minz/Url.php index 06390c4c6..be3184b40 100644 --- a/lib/Minz/Url.php +++ b/lib/Minz/Url.php @@ -28,7 +28,7 @@ class Minz_Url { $url_string = Minz_Request::getBaseUrl(); if (strlen($url_string) < strlen('http://a.bc')) { $url_string = Minz_Request::guessBaseUrl(); - if (PUBLIC_RELATIVE === '..') { + if (PUBLIC_RELATIVE === '..' && preg_match('%' . PUBLIC_TO_INDEX_PATH . '(/|$)%', $url_string)) { //TODO: Implement proper resolver of relative parts such as /test/./../ $url_string = dirname($url_string); } diff --git a/p/index.php b/p/index.php new file mode 100644 index 000000000..65d3a8c3f --- /dev/null +++ b/p/index.php @@ -0,0 +1,6 @@ + 'index', 'a' => 'index'], true); -- cgit v1.2.3