The way to alter the action handler for the search form is to add a submit handler, as outlined here: http://stackoverflow.com/questions/6444769/altering-search-form-action-not-working-for-custom-search-module-drupal-6https://stackoverflow.com/questions/6444769/altering-search-form-action-not-working-for-custom-search-module-drupal-6. You can call your function in the submit handler or redirect to it from the submit handler.
/**
* Implementation of hook_form_alter()
*/
function mymodule_form_alter(&$form, &$form_state, $form_id) {
if($form_id == 'search_block_form') {
$form['#submit'][] = 'mymodule_form_submit';
}
}
/**
* Process a block search form submission.
*/
function mymodule_form_submit($form, &$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,
// for example by drupal_access_denied() or drupal_not_found()
// (see http://drupal.org/node/292565).
if (isset($_GET['destination'])) {
unset($_GET['destination']);
}
// Check to see if the form was submitted empty.
// If it is empty, display an error message.
// (This method is used instead of setting #required to TRUE for this field
// because that results in a confusing error message. It would say a plain
// "field is required" because the search keywords field has no title.
// The error message would also complain about a missing #title field.)
if ($form_state['values']['search_block_form'] == '') {
form_set_error('keys', t('Please enter some keywords.'));
}
$form_id = $form['form_id']['#value'];
$form_state['redirect'] = 'search/mymodule/'. trim($form_state['values'][$form_id]);
}