Index: wp-includes/query.php
===================================================================
--- wp-includes/query.php	(revision 18324)
+++ wp-includes/query.php	(working copy)
@@ -3489,16 +3489,28 @@
 		if ( get_query_var('post_type') )
 			$post_type = get_query_var('post_type');
 		elseif ( !empty($wp_query->query_vars['pagename']) )
-			$post_type = 'page';
+			$post_type = array( 'page' );
 		else
-			$post_type = 'post';
+			$post_type = array( 'post' );
 
-		// Do not attempt redirect for hierarchical post types
-		if ( is_post_type_hierarchical( $post_type ) )
+		if ( ! is_array( $post_type ) ) {
+			$post_type = preg_split( '/\s+,\s+/', $post_type );
+		}
+
+		$post_type_query = array();
+		foreach ( $post_type as $pt ) {
+			// Do not attempt redirect for hierarchical post types
+			if ( !is_post_type_hierarchical( $pt ) )
+				$post_type_query[] = $wpdb->prepare( 'post_type = %s', $pt );
+		}
+
+		if ( empty( $post_type_query ) )
 			return;
 
-		$query = $wpdb->prepare("SELECT post_id FROM $wpdb->postmeta, $wpdb->posts WHERE ID = post_id AND post_type = %s AND meta_key = '_wp_old_slug' AND meta_value = %s", $post_type, $wp_query->query_vars['name']);
+		$post_type_query = '( ' . implode( ' OR ', $post_type_query ) . ' )';
 
+		$query = $wpdb->prepare("SELECT post_id FROM $wpdb->postmeta, $wpdb->posts WHERE ID = post_id AND {$post_type_query} AND meta_key = '_wp_old_slug' AND meta_value = %s", $wp_query->query_vars['name']);
+
 		// if year, monthnum, or day have been specified, make our query more precise
 		// just in case there are multiple identical _wp_old_slug values
 		if ( '' != $wp_query->query_vars['year'] )
