Using a portfolio_category slug in wordpress URL

add

'rewrite' => array('slug' => 'portfolio-categories'),

but be sure to remove (not sure why that’s there, it tries hides the slug yet tries to rename it to “products” at the same time?):

'rewrite' => array( 'with_front' => false, 'slug' => 'products' ),

So it looks like this:

function mysite_post_types() {
register_post_type('portfolio', array(
    'labels' => array(
        'name' => _x('Portfolios', 'post type general name', MYSITE_ADMIN_TEXTDOMAIN ),
        'singular_name' => _x('Portfolio', 'post type singular name', MYSITE_ADMIN_TEXTDOMAIN ),
        'add_new' => _x('Add New', 'portfolio', MYSITE_ADMIN_TEXTDOMAIN ),
        'add_new_item' => __('Add New Portfolio', MYSITE_ADMIN_TEXTDOMAIN ),
        'edit_item' => __('Edit Portfolio', MYSITE_ADMIN_TEXTDOMAIN ),
        'new_item' => __('New Portfolio', MYSITE_ADMIN_TEXTDOMAIN ),
        'view_item' => __('View Portfolio', MYSITE_ADMIN_TEXTDOMAIN ),
        'search_items' => __('Search Portfolios', MYSITE_ADMIN_TEXTDOMAIN ),
        'not_found' =>  __('No portfolios found', MYSITE_ADMIN_TEXTDOMAIN ),
        'not_found_in_trash' => __('No portfolios found in Trash', MYSITE_ADMIN_TEXTDOMAIN ), 
        'parent_item_colon' => ''
    ),
    'singular_label' => __('Portfolio', MYSITE_ADMIN_TEXTDOMAIN ),
    'public' => true,
    'exclude_from_search' => false,
    'show_ui' => true,
    'capability_type' => 'post',
    'hierarchical' => true,
    'rewrite' => array('slug' => 'portfolio-categories')
     )
    );

just make sure the register_post_type closes out correctly, the code you posted ends in the middle of the array. i closed it for you but i’m not sure if you left anything out. some examples here: http://codex.wordpress.org/Function_Reference/register_post_type