diff --git a/core/modules/views/src/Plugin/views/field/FieldPluginBase.php b/core/modules/views/src/Plugin/views/field/FieldPluginBase.php
index 96416fe..024dc7e 100644
--- a/core/modules/views/src/Plugin/views/field/FieldPluginBase.php
+++ b/core/modules/views/src/Plugin/views/field/FieldPluginBase.php
@@ -1427,9 +1427,13 @@ protected function renderAsLink($alter, $text, $tokens) {
     // Only do this on for external URLs.
     if ($alter['external']) {
       if (!isset($url['scheme'])) {
+        // If alter[path] is a token like {{ field_url }} need to replace it,
+        // because replacement value may be an external url.
+        $path = $this->viewsTokenReplace($alter['path'], $tokens);
         // There is no scheme, add the default 'http://' to the $path.
-        // Use the original $alter['path'] instead of the parsed version.
-        $path = "http://" . $alter['path'];
+        if (strpos($path, '://') === FALSE) {
+          $path = "http://" . $path;
+        }
         // Reset the $url array to include the new scheme.
         $url = UrlHelper::parse($path);
       }
diff --git a/core/modules/views/tests/src/Unit/Plugin/field/FieldPluginBaseTest.php b/core/modules/views/tests/src/Unit/Plugin/field/FieldPluginBaseTest.php
index 98dcb1d..de39a5f 100644
--- a/core/modules/views/tests/src/Unit/Plugin/field/FieldPluginBaseTest.php
+++ b/core/modules/views/tests/src/Unit/Plugin/field/FieldPluginBaseTest.php
@@ -326,6 +326,8 @@ public function providerTestRenderAsLinkWithPathAndOptions() {
 
     // External URL.
     $data[] = ['https://www.drupal.org', [], [], '<a href="https://www.drupal.org">value</a>'];
+    $data[] = ['www.drupal.org', ['external' => TRUE], [], '<a href="http://www.drupal.org">value</a>'];
+    $data[] = ['', ['external' => TRUE], [], 'value'];
 
     return $data;
   }
@@ -533,6 +535,62 @@ public function providerTestRenderAsLinkWithPathAndTokens() {
   }
 
   /**
+   * Test rendering of a link with a path and options.
+   *
+   * @dataProvider providerTestRenderAsExternalLinkWithPathAndTokens
+   * @covers ::renderAsLink
+   */
+  public function testRenderAsExternalLinkWithPathAndTokens($path, $tokens, $link_html, $context) {
+    $alter = [
+      'make_link' => TRUE,
+      'path' => $path,
+      'url' => '',
+    ];
+    if (isset($context['alter'])) {
+      $alter += $context['alter'];
+    }
+
+    $this->setUpUrlIntegrationServices();
+    $this->setupDisplayWithEmptyArgumentsAndFields();
+    $this->executable->build_info['substitutions'] = $tokens;
+    $field = $this->setupTestField(['alter' => $alter]);
+    $field->field_alias = 'key';
+    $row = new ResultRow(['key' => 'value']);
+
+    $build = [
+      '#type' => 'inline_template',
+      '#template' => $path,
+      '#context' => ['foo' => $context['context_path']],
+      '#post_render' => [function() {}],
+    ];
+
+    $this->renderer->expects($this->once())
+      ->method('renderPlain')
+      ->with($build)
+      ->willReturn($context['context_path']);
+
+    $result = $field->advancedRender($row);
+    $this->assertEquals($link_html, $result);
+  }
+
+  /**
+   * Data provider for ::testRenderAsExternalLinkWithPathAndTokens().
+   *
+   * @return array
+   *   Test data.
+   */
+  public function providerTestRenderAsExternalLinkWithPathAndTokens() {
+    $data = [];
+
+    $data[] = ['{{ foo }}', ['{{ foo }}' => 'http://www.drupal.org'], '<a href="http://www.drupal.org">value</a>', ['context_path' => 'http://www.drupal.org']];
+    $data[] = ['{{ foo }}', ['{{ foo }}' => ''], 'value', ['context_path' => '']];
+    $data[] = ['{{ foo }}', ['{{ foo }}' => ''], 'value', ['context_path' => '', 'alter' => ['external' => TRUE]]];
+    $data[] = ['{{ foo }}', ['{{ foo }}' => '/test-path/123'], '<a href="/test-path/123">value</a>', ['context_path' => '/test-path/123']];
+
+    return $data;
+  }
+
+  /**
    * Sets up a test field.
    *
    * @return \Drupal\Tests\views\Unit\Plugin\field\FieldPluginBaseTestField|\PHPUnit_Framework_MockObject_MockObject
