diff --git a/core/modules/system/tests/src/Functional/Update/RebuildScriptTest.php b/core/modules/system/tests/src/Functional/Update/RebuildScriptTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..a684b037f71db88155a9f6fd965335e67e9ddc07
--- /dev/null
+++ b/core/modules/system/tests/src/Functional/Update/RebuildScriptTest.php
@@ -0,0 +1,40 @@
+<?php
+
+namespace Drupal\Tests\system\Functional\Update;
+
+use Drupal\Core\Url;
+use Drupal\Tests\BrowserTestBase;
+
+/**
+ * Tests the rebuild script access and functionality.
+ *
+ * @group Rebuild
+ */
+class RebuildScriptTest extends BrowserTestBase {
+
+  /**
+   * Test redirect in rebuild.php.
+   */
+  public function testRebuild() {
+    $cache = $this->container->get('cache.default');
+
+    $cache->set('rebuild_test', TRUE);
+    $this->drupalGet(Url::fromUri('base:core/rebuild.php'));
+    $this->assertUrl(new Url('<front>'));
+    $this->assertTrue($cache->get('rebuild_test'));
+
+    $settings['settings']['rebuild_access'] = (object) [
+      'value' => TRUE,
+      'required' => TRUE,
+    ];
+
+    $this->writeSettings($settings);
+    $this->rebuildAll();
+
+    $cache->set('rebuild_test', TRUE);
+    $this->drupalGet(Url::fromUri('base:core/rebuild.php'));
+    $this->assertUrl(new Url('<front>'));
+    $this->assertFalse($cache->get('rebuild_test'));
+  }
+
+}
diff --git a/core/rebuild.php b/core/rebuild.php
index 6f37360ca643d377d287f9170f5507daf65e37c5..49153f214570e60c36ce0d25e94c42d5b65133fc 100644
--- a/core/rebuild.php
+++ b/core/rebuild.php
@@ -54,4 +54,4 @@
   \Drupal::messenger()->addStatus('Cache rebuild complete.');
 }
 $base_path = dirname(dirname($request->getBaseUrl()));
-header('Location: ' . $base_path);
+header('Location: ' . $request->getSchemeAndHttpHost() . $base_path);