diff --git a/lib/private/URLGenerator.php b/lib/private/URLGenerator.php
index f4a83138e4c5ad4cbbc4b3cc20060dbc581d16c1..167690f3a6e36c6fbb60cda1d88cead9ecab0136 100644
--- a/lib/private/URLGenerator.php
+++ b/lib/private/URLGenerator.php
@@ -237,13 +237,13 @@ class URLGenerator implements IURLGenerator {
 	 * @return string the absolute version of the url
 	 */
 	public function getAbsoluteURL(string $url): string {
-		$separator = $url[0] === '/' ? '' : '/';
+		$separator = strpos($url, '/') === 0 ? '' : '/';
 
 		if (\OC::$CLI && !\defined('PHPUNIT_RUN')) {
 			return rtrim($this->config->getSystemValue('overwrite.cli.url'), '/') . '/' . ltrim($url, '/');
 		}
 		// The ownCloud web root can already be prepended.
-		if(substr($url, 0, \strlen(\OC::$WEBROOT)) === \OC::$WEBROOT) {
+		if(\OC::$WEBROOT !== '' && strpos($url, \OC::$WEBROOT) === 0) {
 			$url = substr($url, \strlen(\OC::$WEBROOT));
 		}
 
diff --git a/tests/lib/UrlGeneratorTest.php b/tests/lib/UrlGeneratorTest.php
index cc93febd53d261a01dbd68af969e7621106c26e6..9a8e588a22951394fd86adfa942d68f42eae8b70 100644
--- a/tests/lib/UrlGeneratorTest.php
+++ b/tests/lib/UrlGeneratorTest.php
@@ -145,6 +145,8 @@ class UrlGeneratorTest extends \Test\TestCase {
 
 	public function provideSubDirURLs() {
 		return [
+			['', 'http://localhost/nextcloud/'],
+			['/', 'http://localhost/nextcloud/'],
 			['index.php', 'http://localhost/nextcloud/index.php'],
 			['/index.php', 'http://localhost/nextcloud/index.php'],
 			['/apps/index.php', 'http://localhost/nextcloud/apps/index.php'],