diff --git a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
index 3744fea..338ea17 100644
--- a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
+++ b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
@@ -5,6 +5,7 @@
 use Drupal\Component\Plugin\DependentPluginInterface;
 use Drupal\Component\Utility\Html;
 use Drupal\Component\Utility\SafeMarkup;
+use Drupal\Component\Utility\UrlHelper;
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Cache\CacheableMetadata;
 use Drupal\Core\Cache\CacheableDependencyInterface;
@@ -2065,14 +2066,34 @@ public function renderPager() {
    */
   public function renderMoreLink() {
     if ($this->isMoreEnabled() && ($this->useMoreAlways() || (!empty($this->view->pager) && $this->view->pager->hasMoreRecords()))) {
-      // If the user has supplied a custom "More" link path, replace any
-      // argument tokens and use that for the URL.
-      if ($this->getOption('link_display') == 'custom_url' && $override_path = $this->getOption('link_url')) {
-        $tokens = $this->getArgumentsTokens();
-        $path = $this->viewsTokenReplace($override_path, $tokens);
+      // If the user has supplied a custom "More" link path, use that for the 
+      // URL.
+      if ($this->getOption('link_display') == 'custom_url' && $path = $this->getOption('link_url')) {
+        // Parse the $path.
+        $parts = UrlHelper::parse($path);
+
+        if ($tokens = $this->getArgumentsTokens()) {
+          // Replace any argument tokens in path.
+          $parts['path'] = $this->viewsTokenReplace($parts['path'], $tokens);
+
+          // Replace any argument tokens in fragment.
+          $parts['fragment'] = $this->viewsTokenReplace($parts['fragment'], $tokens);
+
+          // Replace any argument tokens in query.
+          if (isset($parts['query'])) {
+            foreach ($parts['query'] as $name => $value) {
+              $parts['query'][$name] = $this->viewsTokenReplace($value, $tokens);
+            }
+          }
+        }
+
+        // Get options.
+        $options = array_diff_key($parts, array_flip(['path']));
+
+        // Create url.
         // @todo Views should expect and store a leading /. See:
         //   https://www.drupal.org/node/2423913
-        $url = Url::fromUserInput('/' . $path);
+        $url = UrlHelper::isExternal($parts['path']) ? Url::fromUri($parts['path'], $options) : Url::fromUserInput('/' . ltrim($parts['path'], '/'), $options);
       }
       // Otherwise, use the URL for the display.
       else {
@@ -2082,11 +2103,10 @@ public function renderMoreLink() {
       // If a URL is available (either from the display or a custom path),
       // render the "More" link.
       if ($url) {
-        $url_options = [];
+        // Merge the exposed query parameters.
         if (!empty($this->view->exposed_raw_input)) {
-          $url_options['query'] = $this->view->exposed_raw_input;
+          $url->mergeOptions(array('query' => $this->view->exposed_raw_input));
         }
-        $url->setOptions($url_options);
 
         return [
           '#type' => 'more_link',
diff --git a/core/modules/views/src/Tests/Plugin/DisplayTest.php b/core/modules/views/src/Tests/Plugin/DisplayTest.php
index 42a389c..52bb3b1 100644
--- a/core/modules/views/src/Tests/Plugin/DisplayTest.php
+++ b/core/modules/views/src/Tests/Plugin/DisplayTest.php
@@ -19,7 +19,7 @@ class DisplayTest extends PluginTestBase {
    *
    * @var array
    */
-  public static $testViews = ['test_filter_groups', 'test_get_attach_displays', 'test_view', 'test_display_more', 'test_display_invalid', 'test_display_empty', 'test_exposed_relationship_admin_ui'];
+  public static $testViews = ['test_filter_groups', 'test_get_attach_displays', 'test_view', 'test_display_more', 'test_display_invalid', 'test_display_empty', 'test_exposed_relationship_admin_ui', 'test_simple_argument'];
 
   /**
    * Modules to enable.
@@ -257,6 +257,96 @@ public function testReadMoreNoDisplay() {
   }
 
   /**
+   * Tests the readmore with custom url.
+   */
+  public function testReadMoreCustomURL() {
+    /** @var \Drupal\Core\Render\RendererInterface $renderer */
+    $renderer = $this->container->get('renderer');
+
+    $view = Views::getView('test_display_more');
+    $view->setDisplay('default');
+    $view->display_handler->setOption('use_more', 1);
+    $view->display_handler->setOption('use_more_always', 1);
+    $view->display_handler->setOption('link_display', 'custom_url');
+
+    // Test more link without leading slash.
+    $view->display_handler->setOption('link_url', 'node');
+    $this->executeView($view);
+    $output = $view->preview();
+    $output = $renderer->renderRoot($output);
+    $this->setRawContent($output);
+    $this->assertLinkByHref('/node', 0, 'The read more link with href "/node" was found.');
+
+    // Test more link with leading slash.
+    $view->display_handler->setOption('link_display', 'custom_url');
+    $view->display_handler->setOption('link_url', '/node');
+    $this->executeView($view);
+    $output = $view->preview();
+    $output = $renderer->renderRoot($output);
+    $this->setRawContent($output);
+    $this->assertLinkByHref('/node', 0, 'The read more link with href "/node" was found.');
+
+    // Test more link with absolute url.
+    $view->display_handler->setOption('link_display', 'custom_url');
+    $view->display_handler->setOption('link_url', 'http://drupal.org');
+    $this->executeView($view);
+    $output = $view->preview();
+    $output = $renderer->renderRoot($output);
+    $this->setRawContent($output);
+    $this->assertLinkByHref('http://drupal.org', 0, 'The read more link with href "http://drupal.org" was found.');
+
+    // Test more link with query parameters in the url.
+    $view->display_handler->setOption('link_display', 'custom_url');
+    $view->display_handler->setOption('link_url', 'node?page=1&foo=bar');
+    $this->executeView($view);
+    $output = $view->preview();
+    $output = $renderer->renderRoot($output);
+    $this->setRawContent($output);
+    $this->assertLinkByHref('/node?page=1&foo=bar', 0, 'The read more link with href "/node?page=1&foo=bar" was found.');
+
+    // Test more link with fragment in the url.
+    $view->display_handler->setOption('link_display', 'custom_url');
+    $view->display_handler->setOption('link_url', 'node#target');
+    $this->executeView($view);
+    $output = $view->preview();
+    $output = $renderer->renderRoot($output);
+    $this->setRawContent($output);
+    $this->assertLinkByHref('/node#target', 0, 'The read more link with href "/node#target" was found.');
+
+    // Test more link with arguments.
+    $view = Views::getView('test_simple_argument');
+    $view->setDisplay('default');
+    $view->display_handler->setOption('use_more', 1);
+    $view->display_handler->setOption('use_more_always', 1);
+    $view->display_handler->setOption('link_display', 'custom_url');
+    $view->display_handler->setOption('link_url', 'node?date={{ raw_arguments.age }}&foo=bar');
+    $view->setArguments(array(22));
+    $this->executeView($view);
+    $output = $view->preview();
+    $output = $renderer->renderRoot($output);
+    $this->setRawContent($output);
+    $this->assertLinkByHref('/node?date=22&foo=bar', 0, 'The read more link with href "/node?date=22&foo=bar" was found.');
+
+    // Test more link with arguments in path.
+    $view->display_handler->setOption('link_url', 'node/{{ raw_arguments.age }}?date={{ raw_arguments.age }}&foo=bar');
+    $view->setArguments(array(22));
+    $this->executeView($view);
+    $output = $view->preview();
+    $output = $renderer->renderRoot($output);
+    $this->setRawContent($output);
+    $this->assertLinkByHref('/node/22?date=22&foo=bar', 0, 'The read more link with href "/node/22?date=22&foo=bar" was found.');
+
+    // Test more link with arguments in fragment.
+    $view->display_handler->setOption('link_url', 'node?date={{ raw_arguments.age }}&foo=bar#{{ raw_arguments.age }}');
+    $view->setArguments(array(22));
+    $this->executeView($view);
+    $output = $view->preview();
+    $output = $renderer->renderRoot($output);
+    $this->setRawContent($output);
+    $this->assertLinkByHref('/node?date=22&foo=bar#22', 0, 'The read more link with href "/node?date=22&foo=bar#22" was found.');
+  }
+
+  /**
    * Tests invalid display plugins.
    */
   public function testInvalidDisplayPlugins() {
