Not tested this out thoroughly, but I think it's preferable to remove underlying resource rather than try to build walls around it on web server level. So in WP terms that would be stopping it from processing author-related query variables.

    if ( ! is_admin() ) {
    	add_filter(
    		'query_vars',
    		function ( $public_query_vars ) {
    
    			foreach ( array( 'author', 'author_name' ) as $var ) {
    				$key = array_search( $var, $public_query_vars );
    				if ( false !== $key ) {
    					unset( $public_query_vars[$key] );
    				}
    			}
    
    			return $public_query_vars;
    		}
    	);
    }