How to get the parameters on page and avoid 404?

The conjunction of add_rewrite_rule() & add_rewrite_tag() is a little bit tricky, perhaps you could use parse_url hook what came useful for me. The code below is to catch multiple paramete=value separated with slash. Code –

add_filter( 'parse_request', 'wpse128790_parse_request' );

function wpse128790_parse_request( $wp )
{
    $pageslug = 'mypage';

    if( isset($wp->request) && strpos($wp->request, "https://wordpress.stackexchange.com/") )
    {
        $requests = explode("https://wordpress.stackexchange.com/", $wp->request);
        if( $pageslug == array_shift($requests) )
        {
            $wp->set_query_var('pagename', $pageslug);
            $wp->set_query_var('attachment', false );
            $wp->set_query_var('error', false );

            $count = count( $requests );

            if( $count > 0 )
            {
                // stop the canonical redirection
                remove_action('template_redirect', 'redirect_canonical');

                foreach( $requests as $i => $request )
                {
                    // this should be the key, and next one will be the value
                    if( $i == 0 || $i % 2 == 0 )
                    {
                        if( isset($requests[$i+1]) )
                            $val = $requests[$i+1];
                        else
                            $val="";

                        $wp->set_query_var( $request, $val );
                    }
                }
            }
        }
    }
}

But you probably do filter the parameters using in_array or something to make sure it’s safe to be included in wp query var