Custom EndPoint not working when strip child category in URL

Disable the Canonical redirect will keep the code work:

function disable_canonical_redirect_for_download_page( $redirect ) {
    if ( isset( $wp_query->query_vars['download'] ) || is_singular() ) {
            $redirect = false;
    }

    return $redirect;
}
add_filter( 'redirect_canonical', 'disable_canonical_redirect_for_download_page' );