diff --git a/core/lib/Drupal/Core/Entity/Entity.php b/core/lib/Drupal/Core/Entity/Entity.php
index cf18d55..401da83 100644
--- a/core/lib/Drupal/Core/Entity/Entity.php
+++ b/core/lib/Drupal/Core/Entity/Entity.php
@@ -156,8 +156,19 @@ public function urlInfo($rel = 'canonical') {
     $link_templates = $this->linkTemplates();
 
     if (isset($link_templates[$rel])) {
-      // If there is a template for the given relationship type, generate the path.
-      $uri = new Url($link_templates[$rel], $this->urlRouteParameters($rel));
+      $route_parameters = $this->urlRouteParameters($rel);
+      // @TODO Temporarily allow both route names and paths as link templates.
+      if (strpos($link_templates[$rel], '/') !== FALSE) {
+        $placeholders = array();
+        foreach ($route_parameters as $name => $parameter) {
+          $placeholders['{' . $name . '}'] = $parameter;
+        }
+        $uri = Url::createFromPath(str_replace(array_keys($placeholders), array_values($placeholders), $link_templates[$rel]));
+      }
+      else {
+        // If there is a template for the given relationship type, generate the path.
+        $uri = new Url($link_templates[$rel], $route_parameters);
+      }
     }
     else {
       $bundle = $this->bundle();
diff --git a/core/modules/node/src/Entity/Node.php b/core/modules/node/src/Entity/Node.php
index 19f311e..a1bf64d 100644
--- a/core/modules/node/src/Entity/Node.php
+++ b/core/modules/node/src/Entity/Node.php
@@ -51,7 +51,7 @@
  *   bundle_entity_type = "node_type",
  *   permission_granularity = "bundle",
  *   links = {
- *     "canonical" = "node.view",
+ *     "canonical" = "node/{node}",
  *     "delete-form" = "node.delete_confirm",
  *     "edit-form" = "node.page_edit",
  *     "version-history" = "node.revision_overview",
diff --git a/core/modules/rest/src/Plugin/Derivative/EntityDerivative.php b/core/modules/rest/src/Plugin/Derivative/EntityDerivative.php
index 5b17bc6..bfb0e35 100644
--- a/core/modules/rest/src/Plugin/Derivative/EntityDerivative.php
+++ b/core/modules/rest/src/Plugin/Derivative/EntityDerivative.php
@@ -109,7 +109,11 @@ public function getDerivativeDefinitions($base_plugin_definition) {
         foreach ($default_uris as $link_relation => $default_uri) {
           // Check if there are link templates defined for the entity type and
           // use the path from the route instead of the default.
-          if ($route_name = $entity_type->getLinkTemplate($link_relation)) {
+          $link_template = $entity_type->getLinkTemplate($link_relation);
+          if (strpos($link_template, '/') !== FALSE) {
+            $this->derivatives[$entity_type_id]['uri_paths'][$link_relation] = '/' . $link_template;
+          }
+          elseif ($route_name = $link_template) {
             // @todo remove the try/catch as part of
             // http://drupal.org/node/2158571
             try {
