Index: apachesolr/apachesolr_search.module
===================================================================
--- apachesolr/apachesolr_search.module	(revision 8)
+++ apachesolr/apachesolr_search.module	(working copy)
@@ -383,13 +383,13 @@
               if ($active = $query->has_field('tid', $tid)) {
                 $contains_active = TRUE;
                 $new_query->remove_field('tid', $term->tid);
-                $path = 'search/' . arg(1) . '/' . $new_query->get_query_basic();
+                $path = apachesolr_search_path($query->get_query_basic()) . '/' . $new_query->get_query_basic();
                 $querystring = $new_query->get_url_querystring();
                 $unclick_link = theme('apachesolr_unclick_link', $path, $querystring);
               }
               else {
                 $new_query->add_field('tid', $term->tid);
-                $path = 'search/' . arg(1) . '/' . $new_query->get_query_basic();
+                $path = apachesolr_search_path($query->get_query_basic()) . '/' . $new_query->get_query_basic();
                 $querystring = $new_query->get_url_querystring();
               }
               $countsort = $count == 0 ? '' : 1 / $count;
@@ -419,7 +419,7 @@
           case 'currentsearch':
             $fields = $query->get_fields();
             $search_keys = $query->get_query_basic();
-            $path = 'search/' . arg(1) . '/' . $search_keys;
+            $path = apachesolr_search_path($query->get_query_basic()) . '/' . $search_keys;
             $options = array();
             if (!$fields) {
               $options['attributes']['class'] = 'active';
@@ -429,7 +429,7 @@
               if ($field['#name']) {
                 $new_query = clone $query;
                 $new_query->remove_field($field['#name'], $field['#value']);
-                $path = 'search/'. arg(1) .'/'. $new_query->get_query_basic();
+                $path = apachesolr_search_path($query->get_query_basic()) . '/' . $new_query->get_query_basic();
                 $querystring = $new_query->get_url_querystring();
                 $unclick_link = theme('apachesolr_unclick_link', $path, $querystring);
                 if (! $fielddisplay = theme("apachesolr_breadcrumb_". $field['#name'], $field['#value'])) {
@@ -522,7 +522,7 @@
         '#suffix' => '</div>',
         '#type' => 'item',
         '#title' => t('Did you mean'),
-        '#value' => l($new_keywords, 'search/'. arg(1) .'/'. $new_keywords),
+        '#value' => l($new_keywords, apachesolr_search_path($query->get_query_basic()) . '/' . $new_keywords),
       );
     }
   }
Index: apachesolr/contrib/apachesolr_multisitesearch/apachesolr_multisitesearch.module
===================================================================
--- apachesolr/contrib/apachesolr_multisitesearch/apachesolr_multisitesearch.module	(revision 8)
+++ apachesolr/contrib/apachesolr_multisitesearch/apachesolr_multisitesearch.module	(working copy)
@@ -186,7 +186,7 @@
       return $blocks;
 
     case 'view':
-      if (arg(1) == 'apachesolr_multisitesearch' && apachesolr_has_searched()) {
+      if (apachesolr_has_searched()) {
         // Get the query and response. Without these no blocks make sense.
         $response =& apachesolr_static_response_cache();
         if (empty($response)) {
@@ -225,12 +225,12 @@
                 if ($active = $query->has_field('hash', $hash)) {
                   $contains_active = TRUE;
                   $new_query->remove_field('hash', $hash);
-                  $path = 'search/'. arg(1) . '/' . $new_query->get_query();
+                  $path = apachesolr_search_path($query->get_query_basic()) . '/' . $new_query->get_query_basic();
                   $unclick_link = theme('apachesolr_unclick_link', $path);
                 }
                 else {
                   $new_query->add_field('hash', $hash);
-                  $path = 'search/'. arg(1) . '/' . $new_query->get_query();
+                  $path = apachesolr_search_path($query->get_query_basic()) . '/' . $new_query->get_query_basic();
                 }
                 $countsort = $count == 0 ? '' : 1 / $count;
                 // if numdocs == 1 and !active, don't add.
@@ -289,4 +289,3 @@
 function theme_apachesolr_breadcrumb_hash($hash) {
   return apachesolr_multisitesearch_block('get site', $hash);
 }
-
Index: apachesolr/apachesolr.module
===================================================================
--- apachesolr/apachesolr.module	(revision 8)
+++ apachesolr/apachesolr.module	(working copy)
@@ -631,7 +631,7 @@
             }
 
             $sort_links = array();
-            $path = 'search/' . arg(1) . '/' . $query->get_query_basic();
+            $path = apachesolr_search_path($query->get_query_basic()) . '/' . $query->get_query_basic();
             $new_query = clone $query;
             foreach ($sorts as $type => $sort) {
               $new_sort = isset($solrsorts[$type]) ? $solrsorts[$type] == 'asc' ? 'desc' : 'asc' : $sort['default'];
@@ -675,14 +675,13 @@
       if ($active = $query->has_field($facet_field, $facet)) {
         $contains_active = TRUE;
         $new_query->remove_field($facet_field, $facet);
-        // TODO: don't assume 'search' - find the real path.
-        $path = 'search/'. arg(1) .'/'. $new_query->get_query_basic();
+        $path = apachesolr_search_path($query->get_query_basic()) . '/' . $new_query->get_query_basic();
         $querystring = $new_query->get_url_querystring();
         $unclick_link = theme('apachesolr_unclick_link', $path, $querystring);
       }
       else {
         $new_query->add_field($facet_field, $facet);
-        $path = 'search/'. arg(1) .'/'. $new_query->get_query_basic();
+        $path = apachesolr_search_path($query->get_query_basic()) . '/' . $new_query->get_query_basic();
         $querystring = $new_query->get_url_querystring();
       }
       $countsort = $count == 0 ? '' : 1 / $count;
@@ -959,6 +958,19 @@
 }
 
 /**
+ * Fetch the current search path. It is $_GET['q'] without the search keys
+ */
+function apachesolr_search_path($search_keys) {
+  // -1 to remove the trailing /
+  if (!empty($search_keys)) {
+    return substr($_GET['q'], 0, strpos($_GET['q'], $search_keys) - 1);
+  }
+  else {
+    return $_GET['q'];
+  }
+}
+
+/**
  * Implementation of hook_theme().
  */
 function apachesolr_theme() {
@@ -1043,4 +1055,3 @@
 function theme_apachesolr_sort_list($items) {
   return theme('item_list', $items);
 }
-
