diff --git a/core/lib/Drupal/Core/Path/AliasStorage.php b/core/lib/Drupal/Core/Path/AliasStorage.php
index 899c39e..0a777e2 100644
--- a/core/lib/Drupal/Core/Path/AliasStorage.php
+++ b/core/lib/Drupal/Core/Path/AliasStorage.php
@@ -98,7 +98,8 @@ public function save($source, $alias, $langcode = LanguageInterface::LANGCODE_NO
   public function load($conditions) {
     $select = $this->connection->select('url_alias');
     foreach ($conditions as $field => $value) {
-      $select->condition($field, $value);
+      // Use LIKE for case-insensitive matching.
+      $select->condition($field, $value, 'LIKE');
     }
     return $select
       ->fields('url_alias')
@@ -115,7 +116,8 @@ public function delete($conditions) {
     $path = $this->load($conditions);
     $query = $this->connection->delete('url_alias');
     foreach ($conditions as $field => $value) {
-      $query->condition($field, $value);
+      // Use LIKE for case-insensitive matching.
+      $query->condition($field, $value, 'LIKE');
     }
     $deleted = $query->execute();
     // @todo Switch to using an event for this instead of a hook.
@@ -129,7 +131,6 @@ public function delete($conditions) {
    */
   public function preloadPathAlias($preloaded, $langcode) {
     $args = array(
-      ':system[]' => $preloaded,
       ':langcode' => $langcode,
       ':langcode_undetermined' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     );
@@ -140,19 +141,22 @@ public function preloadPathAlias($preloaded, $langcode) {
     // created alias for each source. Subsequent queries using fetchField() must
     // use pid DESC to have the same effect. For performance reasons, the query
     // builder is not used here.
+    $select = $this->connection->select('url_alias');
+    $select->fields('url_alias', ['source', 'alias']);
+    $select->condition('source', $preloaded, 'IN');
     if ($langcode == LanguageInterface::LANGCODE_NOT_SPECIFIED) {
-      // Prevent PDO from complaining about a token the query doesn't use.
+      // Don't put the same value in the IN query twice.
       unset($args[':langcode']);
-      $result = $this->connection->query('SELECT source, alias FROM {url_alias} WHERE source IN ( :system[] ) AND langcode = :langcode_undetermined ORDER BY pid ASC', $args);
     }
     elseif ($langcode < LanguageInterface::LANGCODE_NOT_SPECIFIED) {
-      $result = $this->connection->query('SELECT source, alias FROM {url_alias} WHERE source IN ( :system[] ) AND langcode IN (:langcode, :langcode_undetermined) ORDER BY langcode ASC, pid ASC', $args);
+      $select->orderBy('langcode', 'ASC');
     }
     else {
-      $result = $this->connection->query('SELECT source, alias FROM {url_alias} WHERE source IN ( :system[] ) AND langcode IN (:langcode, :langcode_undetermined) ORDER BY langcode DESC, pid ASC', $args);
+      $select->orderBy('langcode', 'DESC');
     }
-
-    return $result->fetchAllKeyed();
+    $select->condition('langcode', $args, 'IN');
+    $select->orderBy('pid', 'ASC');
+    return $select->execute()->fetchAllKeyed();
   }
 
   /**
@@ -160,23 +164,26 @@ public function preloadPathAlias($preloaded, $langcode) {
    */
   public function lookupPathAlias($path, $langcode) {
     $args = array(
-      ':source' => $path,
       ':langcode' => $langcode,
       ':langcode_undetermined' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     );
     // See the queries above.
+    $select = $this->connection->select('url_alias');
+    $select->fields('url_alias', ['alias']);
     if ($langcode == LanguageInterface::LANGCODE_NOT_SPECIFIED) {
       unset($args[':langcode']);
-      $alias = $this->connection->query("SELECT alias FROM {url_alias} WHERE source = :source AND langcode = :langcode_undetermined ORDER BY pid DESC", $args)->fetchField();
     }
     elseif ($langcode > LanguageInterface::LANGCODE_NOT_SPECIFIED) {
-      $alias = $this->connection->query("SELECT alias FROM {url_alias} WHERE source = :source AND langcode IN (:langcode, :langcode_undetermined) ORDER BY langcode DESC, pid DESC", $args)->fetchField();
+      $select->orderBy('langcode', 'DESC');
     }
     else {
-      $alias = $this->connection->query("SELECT alias FROM {url_alias} WHERE source = :source AND langcode IN (:langcode, :langcode_undetermined) ORDER BY langcode ASC, pid DESC", $args)->fetchField();
+      $select->orderBy('langcode', 'ASC');
     }
-
-    return $alias;
+    // Use LIKE for case-insensitive matching.
+    $select->condition('source', $path, 'LIKE');
+    $select->condition('langcode', $args, 'IN');
+    $select->orderBy('pid', 'DESC');
+    return $select->execute()->fetchField();
   }
 
   /**
@@ -184,23 +191,26 @@ public function lookupPathAlias($path, $langcode) {
    */
   public function lookupPathSource($path, $langcode) {
     $args = array(
-      ':alias' => $path,
       ':langcode' => $langcode,
       ':langcode_undetermined' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     );
     // See the queries above.
+    $select = $this->connection->select('url_alias');
+    $select->fields('url_alias', ['source']);
     if ($langcode == LanguageInterface::LANGCODE_NOT_SPECIFIED) {
       unset($args[':langcode']);
-      $result = $this->connection->query("SELECT source FROM {url_alias} WHERE alias = :alias AND langcode = :langcode_undetermined ORDER BY pid DESC", $args);
     }
     elseif ($langcode > LanguageInterface::LANGCODE_NOT_SPECIFIED) {
-      $result = $this->connection->query("SELECT source FROM {url_alias} WHERE alias = :alias AND langcode IN (:langcode, :langcode_undetermined) ORDER BY langcode DESC, pid DESC", $args);
+      $select->orderBy('langcode', 'DESC');
     }
     else {
-      $result = $this->connection->query("SELECT source FROM {url_alias} WHERE alias = :alias AND langcode IN (:langcode, :langcode_undetermined) ORDER BY langcode ASC, pid DESC", $args);
+      $select->orderBy('langcode', 'ASC');
     }
-
-    return $result->fetchField();
+    // Use LIKE for case-insensitive matching.
+    $select->condition('alias', $path, 'LIKE');
+    $select->condition('langcode', $args, 'IN');
+    $select->orderBy('pid', 'DESC');
+    return $select->execute()->fetchField();
   }
 
   /**
@@ -208,7 +218,8 @@ public function lookupPathSource($path, $langcode) {
    */
   public function aliasExists($alias, $langcode, $source = NULL) {
     $query = $this->connection->select('url_alias')
-      ->condition('alias', $alias)
+      // Use LIKE for case-insensitive matching.
+      ->condition('alias', $alias, 'LIKE')
       ->condition('langcode', $langcode);
     if (!empty($source)) {
       $query->condition('source', $source, '<>');
diff --git a/core/lib/Drupal/Core/Path/AliasStorageInterface.php b/core/lib/Drupal/Core/Path/AliasStorageInterface.php
index 5ac77a3..7717aef 100644
--- a/core/lib/Drupal/Core/Path/AliasStorageInterface.php
+++ b/core/lib/Drupal/Core/Path/AliasStorageInterface.php
@@ -135,8 +135,9 @@ public function languageAliasExists();
    *
    * @param array $header
    *   Table header.
-   * @param string[]|null $keys
-   *   (optional) Search keys.
+   * @param string|null $keys
+   *   (optional) Search keyword that may include one or more '*' as a wildcard
+   *   value.
    *
    * @return array
    *   Array of items to be displayed on the current page.
diff --git a/core/modules/path/src/Tests/PathAliasTest.php b/core/modules/path/src/Tests/PathAliasTest.php
index 651c11f..063e988 100644
--- a/core/modules/path/src/Tests/PathAliasTest.php
+++ b/core/modules/path/src/Tests/PathAliasTest.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\path\Tests;
 
+use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Cache\Cache;
 
 /**
@@ -82,6 +83,13 @@ function testAdminAlias() {
     $this->drupalGet($edit['alias']);
     $this->assertText($node1->label(), 'Alias works.');
     $this->assertResponse(200);
+    // Confirm that the alias works in a case-insensitive way.
+    $this->drupalGet(Unicode::strtolower($edit['alias']));
+    $this->assertText($node1->label(), 'Alias works lower case.');
+    $this->assertResponse(200);
+    $this->drupalGet(Unicode::strtoupper($edit['alias']));
+    $this->assertText($node1->label(), 'Alias works upper case.');
+    $this->assertResponse(200);
 
     // Change alias to one containing "exotic" characters.
     $pid = $this->getPID($edit['alias']);
