hook_menu() item never reached? I have a module where hook_menu() was already used to process ajax calls, like this:

function bizaudit_menu() {
  return [
    'bizaudit/ajax' =&gt; [
      'page callback'     =&gt; '_bizaudit_ajax_handle',
      'access arguments'  =&gt; ['access content'],
      'type'              =&gt; MENU_CALLBACK,
    ],
    'bizaudit/autoexec' =&gt; [
      'page callback'     =&gt; '_bizaudit_autoexec_handle',
      'access arguments'  =&gt; ['access content'],
      'type'              =&gt; MENU_CALLBACK,
    ],
  ];
}


That works pretty well from times, then I just added another item, now to handle some precise route, like this:

function bizaudit_menu() {
  return [
    'bizaudit/ajax' =&gt; [
      'page callback'     =&gt; '_bizaudit_ajax_handle',
      'access arguments'  =&gt; ['access content'],
      'type'              =&gt; MENU_CALLBACK,
    ],
    'bizaudit/autoexec' =&gt; [
      'page callback'     =&gt; '_bizaudit_autoexec_handle',
      'access arguments'  =&gt; ['access content'],
      'type'              =&gt; MENU_CALLBACK,
    ],
    'navigate' =&gt; [
      'page callback'     =&gt; '_bizaudit_navigate_handle',
      'access arguments'  =&gt; ['access content'],
      'type'              =&gt; MENU_CALLBACK,
    ],
  ];
}


But this route seems to be never recognized!
To be sure I changed the callback function like this:

function _bizaudit_navigate_handle() {
  $query_params = drupal_get_query_parameters();
  echo implode('&lt;br&gt;', print_r($query_params, true));
  exit;
}


Using this url 127.0.0.1/apim/navigate should cause the query params to be printed (here empty, but no matter), and nothing else to happen.
Instead I get the normal content of the involved page displayed!
(I didn't omit to clear the cache)

Maybe I'm missing someting obvious?
I think I see your problem

hook_menu is for defining your own page paths in code. It's not for hooking into the processing of a page that already exists. So you've got a conflict where you have 2 pages with the same url and the latter (the node/view page or whatever is it with the same url) is taking precedence over your bizaudit_menu definition. So your code created path is never triggered as Drupal has found another route for your "apim/navigate" path