Remove the Argument from a views URL I have a view with an exposed filter using the hierarchical select module for taxonomy. 

/browse?category=12345

On the same view, I have an argument which does the same thing.

/browse/12345

I want my users to navigate using only the select filter, but this doesn't support breadcrumbs and page titles like the argument does. I wrote a bit of code to inject the filter value into the argument, and that works fine, but the next time I change a filter and refresh the view, the URL changes to that previous value while showing the new value.

/browse/(term id of last selection)?category=(term id of new selection)
aka
/browse/111?category=333

How can I discard this url change and keep things how they work the first time?

function MODULE_views_pre_view(&amp;$view, &amp;$display_id, &amp;$args) {
  switch ($view-&gt;name) {
    case 'resources':
      if ($display_id == 'page_1') {
        if ($_GET['category']) {
          $args = array($_GET['category']);
        }
      }
    break;
  }
}
The exposed filter form is always going to add a query string to the current URL as it's a simple GET form.

You need a form with a submit handler that redirects to the argument based path. You could do this to the existing exposed filter with hook_form_FORM_ID_alter or create a custom form and expose it in a block.

To make the existing form redirect you'd need to do something like:

function mytheme_form_views_exposed_form_alter(&amp;$form, &amp;$form_state) {
  $form['#method'] = 'POST';
  $form['#submit'] = array('mytheme_redirect_taxonomy');
}

function mytheme_redirect_taxonomy($form, &amp;$form_state) {
  $form_state['redirect'] = '/browse/' . $form_state['values']['category'];
}