Using GET parameters with clean urls
I use $_GET variables as needed in my clean-url installs without issue. Views uses $_GET variables, too. Drupal uses $_GET['q'] so you don't want to use that ID, but you should be able to do something like:

function my_redirect_menu() {
  $items['site_search'] = array(
    'page callback' =&gt; 'my_redirect_redirect',
    'access callback' =&gt; TRUE, 
    'type' =&gt; MENU_CALLBACK,
  );
  return $items;
}

function my_redirect_redirect() {
  return $_GET['query'];
}


This is working for me locally. The 2nd item you present in hook_menu only matches for /site_search/foo?query=bar so you only want the first. Be sure to set the 'type' property as well.