Here's an example with `template_redirect` that loads your php script if the `prm1` query var is set:

	// set up the rewrite
	add_action( 'init', 'wpse36736_setup_rewrites' );
	function wpse36736_setup_rewrites(){
		add_rewrite_rule( 'snpv/([^/]+)', 'index.php?prm1=$matches[1]', 'top' );
	}
	
	// add query var
	add_filter('query_vars', 'wpse36736_query_vars');
	function wpse36736_query_vars( $query_vars ){
		$query_vars[] = 'prm1';
		return $query_vars;
	}
	
	// check the query var on template_redirect
	add_filter( 'template_redirect', 'wpse36736_template_redirect' );
	function wpse36736_template_redirect(){
		global $wp_query;
		if( $wp_query->get( 'prm1' ) ):
			include( get_template_directory() . "/prm1.php" );
			exit();
		endif;
	}

You can then access `prm1` in your script via:

    $prm1 = get_query_var( 'prm1' );

The only strange thing about this is the way WordPress interprets this query, the behavior in 3.3 seems to be a bit different than with previous versions. If you inspect the global `$wp_query` variable set for any of these requests, everything is populated as if it's the main posts page and `is_404` is false. I recall this wasn't the case back when I tried to help out on [this question](https://wordpress.stackexchange.com/questions/28408/how-to-create-a-dynamic-page-based-on-form-data-with-a-plugin).

Anyway, what I typically do in this situation is create a page, say `snpv`, and change the rewrite rule to `'index.php?pagename=snpv&prm1=$matches[1]'`.