diff --git a/core/includes/form.inc b/core/includes/form.inc
index 8aee8f0..46253d1 100644
--- a/core/includes/form.inc
+++ b/core/includes/form.inc
@@ -601,7 +601,6 @@ function form_state_keys_no_cache() {
     'must_validate',
     'rebuild',
     'rebuild_info',
-    'redirect',
     'no_redirect',
     'temporary',
     // Internal properties defined by form processing.
diff --git a/core/modules/language/lib/Drupal/language/Tests/LanguageConfigurationTest.php b/core/modules/language/lib/Drupal/language/Tests/LanguageConfigurationTest.php
index f970bdd..f6d162c 100644
--- a/core/modules/language/lib/Drupal/language/Tests/LanguageConfigurationTest.php
+++ b/core/modules/language/lib/Drupal/language/Tests/LanguageConfigurationTest.php
@@ -50,7 +50,7 @@ function testLanguageConfiguration() {
     );
     $this->drupalPost('admin/config/regional/language/add', $edit, 'Add language');
     $this->assertText('French');
-    $this->assertEqual($this->getUrl(), url('admin/config/regional/language', array('absolute' => TRUE)), 'Correct page redirection.');
+    $this->assertUrl('admin/config/regional/language');
     // Langcode for Languages is always 'en'.
     $language = $this->container->get('config.factory')->get('language.entity.fr')->get();
     $this->assertEqual($language['langcode'], 'en');
@@ -72,14 +72,13 @@ function testLanguageConfiguration() {
     );
     $this->drupalPost(NULL, $edit, t('Save configuration'));
     $this->assertOptionSelected('edit-site-default-language', 'fr', 'Default language updated.');
-    $this->assertEqual($this->getUrl(), url('admin/config/regional/settings', array('absolute' => TRUE)), 'Correct page redirection.');
+    $this->assertUrl('admin/config/regional/settings');
 
     // Check if a valid language prefix is added after changing the default
     // language.
     $this->drupalGet('admin/config/regional/language/detection/url');
     $this->assertFieldByXPath('//input[@name="prefix[en]"]', 'en', 'A valid path prefix has been added to the previous default language.');
     // Check if French still has a path prefix.
-    $this->drupalGet('admin/config/regional/language/detection/url');
     $this->assertFieldByXPath('//input[@name="prefix[fr]"]', 'fr', 'French still has a path prefix.');
 
     // Check that prefix can be changed.
@@ -87,6 +86,7 @@ function testLanguageConfiguration() {
       'prefix[fr]' => 'french',
     );
     $this->drupalPost(NULL, $edit, t('Save configuration'));
+    $this->drupalGet('admin/config/regional/language/detection/url');
     $this->assertFieldByXPath('//input[@name="prefix[fr]"]', 'french', 'French path prefix has changed.');
 
     // Check that prefix of non default language cannot be changed to
diff --git a/core/modules/search/lib/Drupal/search/Form/SearchBlockForm.php b/core/modules/search/lib/Drupal/search/Form/SearchBlockForm.php
index 8d0985a..186d75f 100644
--- a/core/modules/search/lib/Drupal/search/Form/SearchBlockForm.php
+++ b/core/modules/search/lib/Drupal/search/Form/SearchBlockForm.php
@@ -36,10 +36,24 @@ public function buildForm(array $form, array &$form_state, Request $request = NU
     // Save the request variable for use in the submit method.
     $this->request = $request;
 
+    // #action cannot be used for the search block form, as it is not guaranteed
+    // that the search block is enabled on the target path. Therefore, we have to
+    // submit to the same page.
+    // @see http://drupal.org/node/292565
+    $info = search_get_default_module_info();
+    if ($info) {
+      $form_state['redirect'] = 'search/' . $info['path'];
+    }
+    // Do not output the form if there is no active search implementation.
+    else {
+      $form['#access'] = FALSE;
+    }
     $form['search_block_form'] = array(
       '#type' => 'search',
       '#title' => t('Search'),
       '#title_display' => 'invisible',
+      '#required' => TRUE,
+      '#required_error' => t('Please enter some keywords.'),
       '#size' => 15,
       '#default_value' => '',
       '#attributes' => array('title' => t('Enter the terms you wish to search for.')),
@@ -61,9 +75,10 @@ public function validateForm(array &$form, array &$form_state) {
    * {@inheritdoc}
    */
   public function submitForm(array &$form, array &$form_state) {
-    // The search form relies on control of the redirect destination for its
-    // functionality, so we override any static destination set in the request.
-    // See http://drupal.org/node/292565.
+    // A destination query parameter on the current/originating path/page would
+    // cause drupal_redirect_form() to redirect to that destination path instead
+    // of the search page. Unset it to ensure we redirect to the search page.
+    // @see http://drupal.org/node/292565
     if ($this->request->query->has('destination')) {
       $this->request->query->remove('destination');
     }
@@ -77,14 +92,8 @@ public function submitForm(array &$form, array &$form_state) {
     if ($form_state['values']['search_block_form'] == '') {
       form_set_error('keys', t('Please enter some keywords.'));
     }
-
+    // Append the search keywords to the redirect path.
     $form_id = $form['form_id']['#value'];
-    $info = search_get_default_module_info();
-    if ($info) {
-      $form_state['redirect'] = 'search/' . $info['path'] . '/' . trim($form_state['values'][$form_id]);
-    }
-    else {
-      form_set_error(NULL, t('Search is currently disabled.'), 'error');
-    }
+    $form_state['redirect'] .= '/' . trim($form_state['values'][$form_id]);
   }
 }
diff --git a/core/modules/search/lib/Drupal/search/Tests/SearchBlockTest.php b/core/modules/search/lib/Drupal/search/Tests/SearchBlockTest.php
index f3b4101..dcf0dbf 100644
--- a/core/modules/search/lib/Drupal/search/Tests/SearchBlockTest.php
+++ b/core/modules/search/lib/Drupal/search/Tests/SearchBlockTest.php
@@ -64,24 +64,13 @@ protected function testSearchFormBlock() {
     $this->assertText('Your search yielded no results');
 
     // Confirm that the user is redirected to the search page.
-    $this->assertEqual(
-      $this->getUrl(),
-      url('search/node/' . $terms['search_block_form'], array('absolute' => TRUE)),
-      'Redirected to correct url.'
-    );
+    $this->assertUrl('search/node/' . $terms['search_block_form']);
 
     // Test an empty search via the block form, from the front page.
     $terms = array('search_block_form' => '');
     $this->drupalPost('node', $terms, t('Search'));
     $this->assertText('Please enter some keywords');
-
-    // Confirm that the user is redirected to the search page, when form is
-    // submitted empty.
-    $this->assertEqual(
-      $this->getUrl(),
-      url('search/node/', array('absolute' => TRUE)),
-      'Redirected to correct url.'
-    );
+    $this->assertUrl('node');
   }
 
 }
