diff --git a/app/helpers.php b/app/helpers.php index 50b41ec05..4c0521d3a 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -92,10 +92,15 @@ function baseUrl($path, $forceAppDomain = false) if ($isFullUrl && !$forceAppDomain) { return $path; } + $path = trim($path, '/'); + $trimBase = rtrim(config('app.url'), '/'); // Remove non-specified domain if forced and we have a domain if ($isFullUrl && $forceAppDomain) { + if (strpos($path, $trimBase) === 0) { + $path = trim(substr($path, strlen($trimBase) - 1)); + } $explodedPath = explode('/', $path); $path = implode('/', array_splice($explodedPath, 3)); } @@ -105,7 +110,7 @@ function baseUrl($path, $forceAppDomain = false) return url($path); } - return rtrim(config('app.url'), '/') . '/' . $path; + return $trimBase . '/' . $path; } /** diff --git a/phpunit.xml b/phpunit.xml index 4c1e4f66c..efed0070e 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -42,5 +42,6 @@ + diff --git a/tests/HelpersTest.php b/tests/HelpersTest.php new file mode 100644 index 000000000..30b0085d6 --- /dev/null +++ b/tests/HelpersTest.php @@ -0,0 +1,19 @@ +set('app.url', 'http://example.com/bookstack'); + $result = baseUrl('/'); + $this->assertEquals('http://example.com/bookstack/', $result); + } + + public function test_base_url_takes_extra_path_into_account_on_forced_domain() + { + config()->set('app.url', 'http://example.com/bookstack'); + $result = baseUrl('http://example.com/bookstack/', true); + $this->assertEquals('http://example.com/bookstack/', $result); + } +} \ No newline at end of file