diff --git a/core/modules/path/lib/Drupal/path/Tests/PathAliasTest.php b/core/modules/path/lib/Drupal/path/Tests/PathAliasTest.php
index e97101d..bd97a8a 100644
--- a/core/modules/path/lib/Drupal/path/Tests/PathAliasTest.php
+++ b/core/modules/path/lib/Drupal/path/Tests/PathAliasTest.php
@@ -135,6 +135,30 @@ function testAdminAlias() {
     $this->assertNoText($alias, 'The untruncated alias was not found.');
     // The 'truncated' alias will always be found.
     $this->assertText($truncated_alias, 'The truncated alias was found.');
+
+    // Create third test node.
+    $node3 = $this->drupalCreateNode();
+
+    // Create absolute path alias.
+    $edit = array();
+    $edit['source'] = 'node/' . $node3->id();
+    $edit['alias'] = '/' . $this->randomName(8);
+    $this->drupalPostForm('admin/config/search/path/add', $edit, t('Save'));
+
+    // Confirm that the alias failed validation.
+    $this->assertText(t('The alias must be a relative path.'), 'Attempt to use an absolute path for a path alias was rejected.');
+
+    // Create fourth test node.
+    $node4 = $this->drupalCreateNode();
+
+    // Create path alias with trailing slash.
+    $edit = array();
+    $edit['source'] = 'node/' . $node3->id();
+    $edit['alias'] = $this->randomName(8) . '/';
+    $this->drupalPostForm('admin/config/search/path/add', $edit, t('Save'));
+
+    // Confirm that the alias failed validation.
+    $this->assertText(t('The alias must not have a trailing slash.'), 'Attempt to use a path with a trailing slash for a path alias was rejected.');
   }
 
   /**
@@ -194,6 +218,26 @@ function testNodeAlias() {
     $this->drupalGet($edit['path[alias]']);
     $this->assertNoText($node1->label(), 'Alias was successfully deleted.');
     $this->assertResponse(404);
+
+    // Create third test node.
+    $node3 = $this->drupalCreateNode();
+
+    // Set its path alias to an absolute path.
+    $edit = array('path[alias]' => '/' . $this->randomName(8));
+    $this->drupalPostForm('node/' . $node3->id() . '/edit', $edit, t('Save'));
+
+    // Confirm that the alias failed validation.
+    $this->assertText(t('The alias must be a relative path.'), 'Attempt to use an absolute path for a path alias was rejected.');
+
+    // Create fourth test node.
+    $node4 = $this->drupalCreateNode();
+
+    // Set its path alias to a path with a trailing slash.
+    $edit = array('path[alias]' => $this->randomName(8) . '/');
+    $this->drupalPostForm('node/' . $node4->id() . '/edit', $edit, t('Save'));
+
+    // Confirm that the alias failed validation.
+    $this->assertText(t('The alias must not have a trailing slash.'), 'Attempt to use a path with a trailing slash for a path alias was rejected.');
   }
 
   /**
diff --git a/core/modules/path/path.admin.inc b/core/modules/path/path.admin.inc
index a2b2072..344fdf3 100644
--- a/core/modules/path/path.admin.inc
+++ b/core/modules/path/path.admin.inc
@@ -235,6 +235,15 @@ function path_admin_form_validate($form, &$form_state) {
   // languages.
   $langcode = isset($form_state['values']['langcode']) ? $form_state['values']['langcode'] : Language::LANGCODE_NOT_SPECIFIED;
 
+  // Ensure that the submitted alias does not begin or end with a forward
+  // slash (/).
+  if (drupal_substr($alias, 0, 1) == '/') {
+    form_set_error('alias', $form_state, t('The alias must be a relative path.'));
+  }
+  if (drupal_substr($alias, -1) == '/') {
+    form_set_error('alias', $form_state, t('The alias must not have a trailing slash.'));
+  }
+
   $has_alias = db_query("SELECT COUNT(alias) FROM {url_alias} WHERE pid <> :pid AND alias = :alias AND langcode = :langcode", array(
       ':pid' => $pid,
       ':alias' => $alias,
diff --git a/core/modules/path/path.module b/core/modules/path/path.module
index 20d9fae..c6f3a67 100644
--- a/core/modules/path/path.module
+++ b/core/modules/path/path.module
@@ -127,6 +127,7 @@ function path_form_node_form_alter(&$form, $form_state) {
  * Form element validation handler for URL alias form element.
  *
  * @see path_form_node_form_alter()
+ * @see path_form_taxonomy_term_form_alter()
  */
 function path_form_element_validate($element, &$form_state, $complete_form) {
   if (!empty($form_state['values']['path']['alias'])) {
@@ -143,6 +144,15 @@ function path_form_element_validate($element, &$form_state, $complete_form) {
       form_set_value($element['langcode'], $form_state['values']['langcode'], $form_state);
     }
 
+    // Ensure that the submitted alias does not begin or end with a forward
+    // slash (/).
+    if (drupal_substr($alias, 0, 1) == '/') {
+      form_error($element, $form_state, t('The alias must be a relative path.'));
+    }
+    if (drupal_substr($alias, -1) == '/') {
+      form_error($element, $form_state, t('The alias must not have a trailing slash.'));
+    }
+
     $path = $form_state['values']['path'];
 
     // Ensure that the submitted alias does not exist yet.
