diff --git a/apachesolr.admin.inc b/apachesolr.admin.inc
index bc1c986..0395b5e 100644
--- a/apachesolr.admin.inc
+++ b/apachesolr.admin.inc
@@ -192,10 +192,23 @@ function apachesolr_environment_edit_form(&$form_state, $environment = NULL) {
       '#value' => t('Delete'),
     );
   }
-  // Cancel
+  $referer_uri = referer_uri();
+  // Omit query strings
+  $request_uri = request_uri(TRUE);
+  $request_uri = ltrim($request_uri, '/');
+  $request_uri = url($request_uri, array('absolute' => 'true'));
+
+  // Redirect cancel link to the search pages if the referer is the same page or
+  // when there is no referer.
+  if (($referer_uri == $request_uri) || empty($referer_uri)) {
+    $cancel_link = url('admin/settings/apachesolr/search-pages', array('absolute' => TRUE));
+  }
+  else {
+    $cancel_link = $referer_uri;
+  }
   $form['actions']['cancel'] = array(
     '#type' => 'markup',
-    '#value' => l(t('Cancel'), referer_uri()),
+    '#value' => l(t('Cancel'), $cancel_link),
   );
 
   return $form;
diff --git a/apachesolr_search.admin.inc b/apachesolr_search.admin.inc
index 9207d79..49393ca 100644
--- a/apachesolr_search.admin.inc
+++ b/apachesolr_search.admin.inc
@@ -424,9 +424,23 @@ function apachesolr_search_page_settings_form(&$form_state, $search_page = NULL)
   );
 
   // Cancel
+  $referer_uri = referer_uri();
+  // Omit query strings
+  $request_uri = request_uri(TRUE);
+  $request_uri = ltrim($request_uri, '/');
+  $request_uri = url($request_uri, array('absolute' => 'true'));
+
+  // Redirect cancel link to the search pages if the referer is the same page or
+  // when there is no referer.
+  if (($referer_uri == $request_uri) || empty($referer_uri)) {
+    $cancel_link = url('admin/settings/apachesolr/search-pages', array('absolute' => TRUE));
+  }
+  else {
+    $cancel_link = $referer_uri;
+  }
   $form['actions']['cancel'] = array(
     '#type' => 'markup',
-    '#value' => l(t('Cancel'), referer_uri()),
+    '#value' => l(t('Cancel'), $cancel_link),
   );
 
   return $form;
