От того, что для изменения параметров запроса используется хук 
pre_get_posts. (можно вставить в functions.php темы)
function search_filter($query) {
  if ( !is_admin() && $query->is_main_query() ) {
    if ($query->is_search) {
      $query->set('posts_per_page', '1' );
    }
  }
}
add_action('pre_get_posts','search_filter');
А если вызывать query_posts перед циклом, то Вы просто делаете второй запрос поверх основного и его работа нарушается.
перебрасывает на главную страницу
Перебрасывает не на главную, а на 404, у Вас, видимо, просто нет шаблона 404.php в теме.